11540 sujets

JavaScript, DOM et API Web HTML5

Bonjour,
J'ai un pb qui ressemble à un bug. DAns le code suivant, ca ne marche que pour les guillemets doubles.


<div onclick="alert('Je suis &#34;cliqué&#34;')"> Doubles guillemets</div> 
<div onclick="alert('Je suis &#39;cliqué&#39;')"> Simples guillemets</div> 


On peut voir la demo à
http://roy.nico.free.fr/guillemet.html

Quelqu'un a t il une idée ??
Merci d'avance.
nicolas
Modifié par roy.nico (08 Dec 2007 - 23:35)
Bonsoir,

Il faut distinguer deux échappement possibles dans ton cas: pour le HTML et pour javascript.
Dans le premier cas il faut échapper pour le HTML uniquement, on utilisera donc les entités.
Dans le second cas il faut échapper pour le javascript uniquement, il suffit alors d'ajouter un backslash devant.
<div onclick="alert('Je suis &quot;cliqué&quot;')"> Doubles guillemets</div>
<div onclick="alert('Je suis \'cliqué\'')"> Simples guillemets</div>




PS: pour les guillemets doubles j'utilise l'entité textuelle (&quot;) car plus claire, mais cela ne change rien.
Modifié par Necromantik (08 Dec 2007 - 22:58)
Bonjour et bienvenue sur ce forum,
édit>un guillemet à l'intérieur d'un string javascript doit être échappé :
alert('Je suis \&#39;cliqué\&#39;')

ou plus simplement :
alert('Je suis \'cliqué\' ')


D'autre part, tu devrai relire http://forum.alsacreations.com/help.php#regle13 et corriger ton message précédent Smiley cligne
Modifié par chmel (08 Dec 2007 - 23:40)
chmel a écrit :
Bonjour et bienvenue sur ce forum,
& à l'intérieur d'un string javascript est un "opérateur de bit" et doit être échapé :
alert('Je suis \&#39;cliqué\&#39;')


Sauf qu'il ne faut pas oublier que c'est interprété comme du HTML auparavant, pour avoir un & dans le javascript il faudrait faire:
alert('Je suis &amp;#39;cliqué&amp;#39;')
& à l'intérieur d'un string n'a pas d'action en effet, l'essentiel était qu'il fallait échapper Smiley cligne
chmel a écrit :
Bonjour et bienvenue sur ce forum,
& à l'intérieur d'un string javascript est un "opérateur de bit" et doit être échapé :
alert('Je suis \'cliqué\'')

ou plus simplement :
alert('Je suis \'cliqué\' ')



Ca marche effectivement en echapant, à la fois pour les ' et pour les ".

<div onclick="alert('Je suis \"cliqué\"')"> Double guillemets</div> 
<div onclick="alert('Je suis \'cliqué\'')"> Simple guillemets</div> 


voir http://roy.nico.free.fr/guillemet2.html

Ce qui est un peu ennuyeux, par contre, c'est que ma chaine "Je suis \'cliqué\", en fait, elle vient d'une variable PHP. A l'origine j'ai donc une chaine genre

$chaine='des simples \' et des doubles "';

Et avant de l'envoyer dans

echo '<div  onclick="alert(\''.$chaine.'\')"> mixte </div>';

Je pensais la passer dans

$chaine=htmlspecialchars ($chaine,ENT_QUOTES);

Ca me transforme effectivement les ' et " en entités HTML, mais ca ne met pas de slash devant Smiley bawling ...


chmel a écrit :

D'autre part, tu devrai relire http://forum.alsacreations.com/help.php#regle13 et corriger ton message précédent Smiley cligne

J'ai essayé de faire de mon mieux, maintenant Smiley sweatdrop
Modifié par roy.nico (08 Dec 2007 - 23:49)
$chaine=addslashes(htmlspecialchars($chaine));

devrait donner quelque chose de correct Smiley smile

(Je penses qu'il vaut mieux transformer les guillemets doubles car sinon le code html risque de mal passer selon les navigateurs)
Modérateur
Salut,

Une div n'est pas un élément focusable ce qui veut dire que l'alerte est inaccessible pour ceux qui ne naviguent qu'au clavier; un lien serait préférable. Smiley cligne

Et pourquoi générer le message d'alerte via php ?
Ce message n'a lieu d'être que lorsque JS est actif donc tu pourrais mettre tout le code javascript dans un fichier externe, ce qui simplifierait ta structure ainsi que la maintenance du code.
Necromantik a écrit :
$chaine=addslashes(htmlspecialchars($chaine));

devrait donner quelque chose de correct Smiley smile

(Je penses qu'il vaut mieux transformer les guillemets doubles car sinon le code html risque de mal passer selon les navigateurs)


A priori ca ne marche pas Smiley bawling . Je crois que addslashes ne rajoute des slach que devant les guillemets et pas devant &, comme on voudrait.

nicolas
Salut,

pour moi cette fonction php marche.

function js_slashes($txt="")
{
	$txt = htmlspecialchars($txt);
	$txt = addslashes($txt);
return $txt;
}