Page 1 sur 1
Pbme de script sur Firefox 2.0
Posté : 10 janv. 2007, 22:51
par Sarawak
Bonsoir,
Je viens d'isntaller Firefox pour effectuer des tests et j'ai une erreur sur un script qui fonctionne bien sous IE
But du script : Quand on clique sur un bouton une fenêtre popup s'ouvre avec les informations transmises par le script
Code : Tout sélectionner
Erreur : unterminated string literal
Fichier source : javascript:agrandir_image('site_internet.jpg', 358, 'News essai', 'News publi%C3%A9e le 04/11/2006', '<p>%0D<br>Ceci est un essai de <strong>news</strong>. %0D<br></p>%0D<br><p>%0D<br>Pour l'italique <em>essayons</em> cela %0D<br></p>%0D<br><h1> Test avec Heading1</h1>%0D<br><h2>Test avec Heading2</h2>%0D<br><p>%0D<br> %0D<br></p>%0D<br>')
Ligne : 1, Colonne : 85
Code source :
agrandir_image('site_internet.jpg', 358, 'News essai', 'News publiée le 04/11/2006', '<p>
A priori quand je passe une variable dans laquelle se trouve des balises HTML (ici <p>) cela plante
Comment faire pour assurer la portabilité ?
Posté : 10 janv. 2007, 23:02
par Arcanis
quel est le code complet?
Posté : 10 janv. 2007, 23:15
par Sarawak
le code appellant
<td width="38"><a href="javascript:agrandir_image('<?=$image?>', 358, '<?=$titre?>', '<?=$pied?>', '<?=$corps?>')"><img src="images/bouton_liresuite.gif" width="38" height="28" border="0"></a></td>
et le détail du code javascript appellé
Code : Tout sélectionner
// affiche les news en surimpression
// avec le titre, l'image, la news
// 4 arguments : le fichier image, sa largeur en pixels, le titre (en haut) et le corps de la news
function agrandir_image(fimage, largeur_image, titre, soustitre, corps) {
// reinitialise le layer
init_layer();
if (obj_layer) {
larg_image = largeur_image;
cache = false;
var ch_texte = "<table cellspacing='0' cellpadding='4' border='0' bgcolor='" + _couleur_fond + "'>";
// affiche le titre en haut
ch_texte += affiche_titre(titre);
// affiche l'image
ch_texte += "<tr> <td width='350'><p class=newst>"+ corps +"<br><br></p><i style='font-size:13;'><a href='javascript:fermer()'>Fermer la fenêtre</a></i></font></td>"
ch_texte += "<td width='358' align='center'" + (_bordure_titre ? " colspan='2'>" : ">") + "<img src='" + _dir_images + fimage + "' border='0'></td></tr>";
// affiche en bas le sous-titre s'il existe
if (soustitre) ch_texte += affiche_soustitre(soustitre);
ch_texte += "</table>";
// replace le layer, si on a fait défilé la fenêtre
scroll_layer();
// affecte ch_texte au contenu du layer
contenu_layer(ch_texte);
}
}
Posté : 10 janv. 2007, 23:17
par Sarawak
c'est bien
Code : Tout sélectionner
td width="38"><a href="javascript:agrandir_image('<?=$image?>', 358, '<?=$titre?>', '<?=$pied?>', '<?=$corps?>')"><img src="images/bouton_liresuite.gif" width="38" height="28" border="0"></a></td>
mauvais copier/coller dans le message précédent
Posté : 10 janv. 2007, 23:32
par Arcanis
cette fonction n'a pas l'air d'être déclarée:
t'est sur d'avoir mis tout le code?
Posté : 11 janv. 2007, 09:32
par Dominic
apparemment le > de <p> est interprêté comme fermant <a href
essaies ta ligne comme suit
<td width="38"><a href=" javascript:agrandir_image('<? print $image; ?>', 358, '<?=$titre?>', '<?=$pied?>
Posté : 11 janv. 2007, 09:48
par Xenon_54
Tu sembles plutôt avoir un problème de guillemets.
Ceci: Pour l'italique
Tu devrais faire: Pour l\'italique
L'apostrophe se confond avec le délimitateur de chaine javascript.
Posté : 11 janv. 2007, 21:18
par Sarawak
apparemment le > de <p> est interprêté comme fermant <a href
essaies ta ligne comme suit
<td width="38"><a href=" javascript:agrandir_image('<? print $image; ?>', 358, '<?=$titre?>', '<?=$pied?>
J'ai remplacé le = par un print, sous IE cela fonctionne, sous Firefox, lj'ai toujours la même erreur.
J'ai testé avec une news sans apostrophe j'ai le même résultat.
Je n'ai pas mis tout le code pour éviter d'alourdir le message mais la fonction
init_layer();
est bien définie.
La seule solution serait elle de passer l'info sans le formatage HTML ?
Dans ce cas comment reformater le texte après ?
Posté : 12 janv. 2007, 09:59
par Dominic
apparemment c'est le signe %0D qui n'est pas interprêté avec firefox
en local sur mon PC j'ai le même type de pb si je fais un copier-coller de la barre d'adresses de firefox et que je le colle dans la barre d'adresse de IE j'ai un message d'erreur
les espaces et les guillemets ne sont pas compatibles par exemple.
regardes ce que signifie au juste ce %0D et essaies en le remplaçant par autre chose
Posté : 12 janv. 2007, 10:08
par Dominic
je viens de voir qu'il s'agit surement du signe + qui est le symbole de concaténation en javascript.
donc pour résoudre ton pb il faudrait que tu fasses un ereg_replace de + par . pour passer de l'un à l'autre.
Ceci est une piste, pas une affirmation absolue.
en tout cas cela n'a pas à voir avec les balises html puisque <p> est restitué
bon courage
Posté : 12 janv. 2007, 10:50
par Sarawak
Merci pour tes réponses, je ferai mes tests ce soir
Posté : 13 janv. 2007, 23:49
par Sarawak
Bon, je crois avoir compris le problème mais je n'ai pas encore la solution.
En fait, les retours à la ligne sont remplacés sous Firefox uniquement par des %OD... et avec ce caractère ça fonctionne pas.
J'ai bien essayé de faire
$corps=str_replace("\n", "<br>", $row[corps]);
mais ça ne fait rien de plus.
D'ailleur je ne suis pas sur qu'en base les retours à la ligne soient stockés en \n
Là ce soir je ne vois pas de solution au problème...donc si vous pouvez éclairer ma lanterne ce serait le bienvenue.

Posté : 14 janv. 2007, 01:07
par Truc
nl2br()

Posté : 14 janv. 2007, 10:31
par Sarawak
nl2br()

ne fonctionne pas mais .....
$corps = preg_replace("/\\r\\n|\\n|\\r/", sprintf("% -".(5+$num)."s","<BR>\\n"), $row[corps]);
lui fonctionne
je clôture donc le post. Merci à tous pour votre aide