¿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?

Ravi
fuente
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 .

Pascal MARTIN
fuente
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 .

Benjamin Manns
fuente
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'>
Gumbo
fuente
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'>
AndiDog
fuente
6

Probablemente la forma más fácil:

<input type='text' id='abc' value="hel'lo">
carretera242
fuente
-1

Puedes intentar usar: &#145;

el perdido
fuente
-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

Ram Bharlia
fuente
escapeNo es unicode seguro. La especificación desaconseja su uso.
Quentin