Comment éviter correctement les guillemets dans les attributs html?

j'ai une chute vers le bas sur une page web qui se casse lorsque la chaîne de valeur contient une citation.

la valeur est "asd mais dans le DOM apparaît toujours comme une chaîne vide.

j'ai essayé toutes les façons que je sais pour échapper à la corde correctement, mais en vain.

<option value=""asd">test</option>
<option value=""asd">test</option>
<option value="&quot;asd">test</option>
<option value=""asd">test</option>

avez-vous une idée de la façon de rendre ceci sur la page pour que le message postback contienne la valeur correcte?

193
demandé sur ThinkingStiff 2010-10-25 18:08:06

6 réponses

&quot; est le bon chemin, le troisième de vos tests:

<option value="&quot;asd">test</option>

vous pouvez voir ce travail ci-dessous, ou sur jsFiddle .

alert($("option")[0].value);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select>
  <option value="&quot;asd">Test</option>
</select>

alternativement, vous pouvez délimiter la valeur de l'attribut avec des guillemets simples:

<option value='"asd'>test</option>
267
répondu Andy E 2018-05-21 17:43:54

si vous utilisez PHP, essayez d'appeler htmlentities ou htmlspecialchars fonction.

9
répondu Lukasz Czerwinski 2013-06-13 12:36:03

par syntaxe HTML , et même HTML5 , les options suivantes sont toutes valides:

<option value="&quot;asd">test</option>
<option value="&#34;asd">test</option>
<option value='"asd'>test</option>
<option value='&quot;asd'>test</option>
<option value='&#34;asd'>test</option>
<option value=&quot;asd>test</option>
<option value=&#34;asd>test</option>

notez que si vous utilisez la syntaxe XML , les guillemets (simple ou double) sont requis.

voici un jsfiddle montrant tout ce qui précède .

6
répondu aij 2016-01-19 16:40:52

une autre option consiste à remplacer les guillemets doubles par des guillemets simples si cela ne vous dérange pas. Mais je ne parle pas de celui-ci:

<option value='"asd'>test</option>

je mentionne celui-ci:

<option value="'asd">test</option>

Dans mon cas, j'ai utilisé cette solution.

5
répondu csonuryilmaz 2012-11-27 09:00:39

vous ne devriez vraiment permettre des données non fiables dans une liste blanche de bons attributs comme: align, alink, alt, bgcolor, border, cellpadding, cellspacing, class, color, cols, colspan, coords, dir, face, height, hspace, ismap, lang, marginheight, marginwidth, multiple, nohref, noresize, noshade, nowrap, ref, rel, rev, rows, rowspan, scrolling, shape, span, summary, tabindex, title, usemap, valign, value, vlink, VSpace, largeur

Vous voulez vraiment garder non fiables les données des gestionnaires javascript ainsi que les attributs id ou name (ils peuvent bloquer d'autres éléments dans le DOM).

aussi, si vous mettez des données non fiables dans un attribut SRC ou HREF, alors c'est vraiment une URL non fiable, donc vous devriez valider L'URL, assurez-vous que ce N'est pas une URL javascript:, et puis l'entité HTML encoder.

plus de détails ici: https://www.owasp.org/index.php/Abridged_XSS_Prevention_Cheat_Sheet

1
répondu Jim Manico 2011-11-20 02:12:51

il n'y a aucun moyen d'échapper aux guillemets dans la valeur d'un texte d'entrée... mais vous pouvez utiliser javascript (ou jquery):

<input type="input" name="myinput" id="myinput" value="" />
<script>document.getElementById("myinput").value="This input has a [\"]";</script>
0
répondu Miguel 2018-09-10 16:33:03