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
htmlentities
ohtmlspecialchars
funcionar.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