Tengo un menú desplegable en una página web que se rompe cuando la cadena de valor contiene una cita.
El valor es "asd, pero en el DOM siempre aparece como una cadena vacía.
He intentado todas las formas que sé para escapar de la cadena correctamente, pero fue en vano.
<option value=""asd">test</option>
<option value="\"asd">test</option>
<option value=""asd">test</option>
<option value=""asd">test</option>
¿Cómo presento esto en la página para que el mensaje de devolución contenga el valor correcto?

htmlentities.Respuestas:
"es la forma correcta, la tercera de tus pruebas:Puede ver esto funcionando a continuación, o en jsFiddle .
Alternativamente, puede delimitar el valor del atributo con comillas simples:
fuente
"asigna al mismo carácter que", pero no hay ningún beneficio de usar la opción numérica aquí porque"es una entidad con nombre definida."También es más fácil de recordar.&quot;a(reemplace&con&)Si está utilizando PHP, intente llamar
htmlentitiesohtmlspecialcharsfuncionar.fuente
<option value='<?php echo htmlentities("' onmouseover='alert(123);' foo='"); ?>' />, asegúrese de usarlo con ENT_QUOTES, esto es seguro:<option value='<?php echo htmlentities("' onmouseover='alert(123);' foo='", ENT_QUOTES); ?>' />pero además de ENT_QUOTES también debe agregar ENT_SUBSTITUTE y ENT_DISALLOWED, personalmente he usado este envoltorio durante años:function hhb_tohtml(string $str):string { return htmlentities($str, ENT_QUOTES | ENT_HTML401 | ENT_SUBSTITUTE | ENT_DISALLOWED, 'UTF-8', true); }Por sintaxis HTML , e incluso HTML5 , las siguientes son todas las opciones válidas:
Tenga en cuenta que si utiliza la sintaxis XML, las comillas (simples o dobles) son obligatorias.
Aquí hay un jsfiddle que muestra todo lo anterior funcionando .
fuente
Otra opción es reemplazar las comillas dobles con comillas simples si no le importa lo que sea. Pero no menciono este:
Menciono este:
En mi caso usé esta solución.
fuente
Si está usando Javascript y Lodash, puede usar _.escape (), que escapa ", ', <,> y &.
Ver aquí: https://lodash.com/docs/#escape
fuente
Realmente solo debe permitir datos no confiables en una lista blanca de buenos atributos como: alinear, alink, alt, bgcolor, border, cellpadding, cellpacing, 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, width
Realmente desea mantener los datos no confiables fuera de los controladores de JavaScript, así como los atributos de identificación o nombre (pueden bloquear otros elementos en el DOM).
Además, si está colocando datos no confiables en un atributo SRC o HREF, entonces es realmente una URL no confiable, por lo que debe validar la URL, asegúrese de que NO sea un javascript: URL, y luego codifique la entidad HTML.
Más detalles sobre todo aquí: https://www.owasp.org/index.php/Abridged_XSS_Prevention_Cheat_Sheet
fuente
No hay forma de escapar de las comillas en el valor de un texto de entrada ... pero puede usar javascript (o jquery):
fuente