¿Cómo escapo de una sola cita?


188

¿Cómo puedo escapar de una '(comilla simple) en JavaScript?

Aquí es donde estoy tratando de usarlo:

<input type='text' id='abc' value='hel'lo'>

El resultado para el código anterior es "hel" poblado en el cuadro de texto. Traté de reemplazar 'con \', pero esto es lo que estoy obteniendo.

<input type='text' id='abc' value='hel\'lo'>

El resultado para el código anterior es "hel \" poblado en el cuadro de texto.

¿Cómo puedo escapar con éxito de las comillas simples?


Hola Ravi, esta es más una pregunta html. Volví a etiquetar la pregunta como HTML, pero es posible que desee cambiar eso en su pregunta.
Benjamin Manns

Respuestas:


358

Podrías usar entidades HTML:

  • &#39; para '
  • &#34; para "
  • ...

Para obtener más información, puede consultar las referencias de entidades de caracteres en HTML .


39
¿Por qué se deben usar comillas dobles para los valores de los atributos?
Gumbo

55
@Pascal MARTIN: XML también permite comillas simples para valores de atributos. (Ver w3.org/TR/xml/#NT-AttValue )
Gumbo

44
@Gumbo: ¡wooo! No creo haber visto ningún documento XML que utilizara valores de atributos de comillas simples; así que no pensé que esto fuera realmente válido; Simplemente (una vez más) aprendí algo al responder una pregunta; entonces, gracias por esos comentarios!
Pascal MARTIN

55
Sé que esto es viejo, pero creo que vale la pena señalar que hay una entidad HTML para ":&quot;
daiscog

1
@Pascal, el validador w3c muestra que las comillas simples son válidas para los atributos. Y vea stackoverflow.com/questions/2210430/…
ChrisJJ

62

Puede usar &apos;(que es dudoso en IE) o &#39;(que debería funcionar en todas partes). Para obtener una lista completa, consulte las referencias de caracteres con nombre HTML5 W3C o la tabla de entidades HTML en WebPlatform.org .


Wow, ha pasado un tiempo desde que escribí esto. Gracias por atraparlo. He actualizado los enlaces a dos tablas en W3C y WebPlatform.org.
Benjamin Manns

Funcionan "en todas partes", excepto en los atributos de expresión VXML <var> donde es necesario escapar más, ya que en VXML <var> se indica un valor de variable de cadena como comillas simples dentro de las comillas dobles normales de las definiciones de atributos: <var name = "myvar" expr = "'hel \ & apos; lo'" />
Steve Cohen

9

Como se encuentra en el contexto de HTML, debe usar HTML para representar ese carácter. Y para HTML necesita usar una referencia de caracteres numéricos &#39; ( &#x27;hexadecimal):

<input type='text' id='abc' value='hel&#39;lo'>

pero yo no entendía lo que quiere usted decir con context of html?
coding_idiot

@coding_idiot Eche un vistazo a los diferentes tokens que un analizador HTML puede encontrar durante el proceso de análisis . Cada estado tiene un conjunto diferente de reglas de análisis que se activan en función de la entrada. No todos los estados permiten referencias de caracteres. Ahora, si observa el valor del atributo (entre comillas simples) , puede ver que a &denota el comienzo de una referencia de caracteres.
Gumbo

7

Representarlo como una entidad de texto (ASCII 39):

<input type='text' id='abc' value='hel&#39;lo'>

6

Probablemente la forma más fácil:

<input type='text' id='abc' value="hel'lo">


-1

use las funciones de JavaScript inbuild escape y unescape

por ejemplo

var escapedData = escape("hel'lo");   
output = "%27hel%27lo%27" which can be used in the attribute.

again to read the value from the attr

var unescapedData = unescape("%27hel%27lo%27")
output = "'hel'lo'"

Esto será útil si tiene enormes datos json stringify para usar en el atributo


escapeNo es unicode seguro. La especificación desaconseja su uso.
Quentin
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.