Cómo escapar de las comillas dobles en un atributo de título


195

Estoy tratando de usar una cadena que contiene comillas dobles en el atributo de título de un ancla. Hasta ahora probé estos:

<a href=".." title="Some \"text\"">Some text</a>
<!-- The title looks like `Some \` --!>

y

<a href=".." title="Some &quot;text&quot;">Some text</a>
<!-- The title looks like `Some ` --!>

Tenga en cuenta que el uso de comillas simples no es una opción.


18
@Haim leyó la pregunta ... dice "las comillas simples no son una opción".
Nils Riedemann

2
@harpax: tenía curiosidad por qué las comillas simples no son una opción.
Bert F

3
Las comillas simples no son html válidas.
skyfoot

1
Su segundo ejemplo debería funcionar absolutamente perfectamente. ¿En qué navegador estás viendo el problema?
Olly Hodgson

1
@harpax: tal vez deberías aclarar el requisito "las comillas simples no son una opción". Supuse que mencionar comillas simples "dentro de 'la' cadena" no es una opción (como se muestra al usuario), pero simplemente cambiar las comillas simples y dobles como Haim mostró arriba estaría bien.
Christian.K

Respuestas:


284

Esta variante

<a title="Some &quot;text&quot;">Hover me</a>

Es correcto y funciona como se esperaba: ve comillas normales en la página representada.


Sí. <a href="#" title="Foo &quot;Bar&quot;">Testing</a>y <a href="#" title="Smart quotes &#8221;Bar&#8220;">Testing too</a>trabaja para mi
Olly Hodgson

55
@Maris: Bueno ... no veo citas normales en la página renderizada cuando hago & quot; (Firefox, Chrome). ¿Por qué?
Krzysztof Trzos

@Maris, el mismo problema aquí. Ver el texto "& quot;" aparecen tanto en IE como en Chrome cuando el usuario pasa el mouse sobre el elemento.
rstackhouse

Increíblemente trabajado con contenido html incrustado dentro del atributo (para que javascript produzca un área de texto editable):data-editable-note="<?php echo str_replace('"', '&quot;', $note); ?>"><?php echo mark::up($note); ?></div>
WEBjuju el

23

Aquí hay un fragmento de los caracteres de escape HTML tomados de una página en caché en archive.org :

&#060   |   less than sign  <       
&#064   |   at sign @       
&#093   |   right bracket   ]       
&#123   |   left curly brace    {       
&#125   |   right curly brace   }       
&#133   |   ellipsis    …       
&#135   |   double dagger   ‡       
&#146   |   right single quote  ’       
&#148   |   right double quote  ”       
&#150   |   short dash  –       
&#153   |   trademark   ™       
&#162   |   cent sign   ¢       
&#165   |   yen sign    ¥       
&#169   |   copyright sign  ©       
&#172   |   logical not sign    ¬       
&#176   |   degree sign °       
&#178   |   superscript 2   ²       
&#185   |   superscript 1   ¹       
&#188   |   fraction 1/4    ¼       
&#190   |   fraction 3/4    ¾       
&#247   |   division sign   ÷       
&#8221  |   right double quote  ”       
&#062   |   greater than sign   >   
&#091   |   left bracket    [   
&#096   |   back apostrophe `   
&#124   |   vertical bar    |   
&#126   |   tilde   ~   
&#134   |   dagger  †   
&#145   |   left single quote   ‘       
&#147   |   left double quote   “   
&#149   |   bullet  •   
&#151   |   longer dash —   
&#161   |   inverted exclamation point  ¡   
&#163   |   pound sign  £   
&#166   |   broken vertical bar ¦   
&#171   |   double left than sign   «   
&#174   |   registered trademark sign   ®   
&#177   |   plus or minus sign  ±   
&#179   |   superscript 3   ³   
&#187   |   double greater-than sign    »   
&#189   |   fraction 1/2    ½   
&#191   |   inverted question mark  ¿   
&#8220  |   left double quote   “   
&#8212  |   dash    —   

9

El código de escape &#34;también se puede usar en lugar de &quot;.


3

Usar &quot;es la forma de hacerlo. Probé su segundo fragmento de código, y funciona tanto en Firefox como en Internet Explorer.


2

Puede funcionar con cualquier carácter de la lista de caracteres de HTML Escape , pero tuve el mismo problema con un proyecto Java. Solía StringEscapeUtils.escapeHTML("Testing \" <br> <p>")y el título era <a href=".." title="Test&quot; &lt;br&gt; &lt;p&gt;">Testing</a>.

Solo funcionó para mí cuando cambié StringEscapeUtils StringEscapeUtils.escapeJavascript("Testing \" <br> <p>")y funcionó en todos los navegadores.


mejor solución en mi opinión
Mohammed Rafeeq

Está bien si está utilizando Java, pero como el investigador original está pidiendo HTML, quizás esta no sea una opción.
Paul

1

Hay al menos una situación en la que el uso de comillas simples no funcionará y es si está creando el marcado "sobre la marcha" desde JavaScript. Utiliza comillas simples para contener la cadena y luego cualquier propiedad en el marcado puede tener comillas dobles para su valor.


1

Quizás pueda usar JavaScript para resolver su problema de navegador cruzado. Utiliza un mecanismo de escape diferente, uno con el que obviamente ya está familiarizado:

(reference-to-the-tag).title = "Some \"text\"";

No separa estrictamente las funciones de HTML, JavaScript y CSS de la forma en que la gente quiere que lo hagas hoy en día, pero ¿a quién necesitas hacer feliz? ¿Tus usuarios o técnicos que no conoces?


Exagerar cuando el resultado deseado puede lograrse de una manera mucho más directa.
Paul

-3

Puede usar este código PHP para enumerar caracteres especiales ...

<table border="1"><?php for($i=33;$i<9000;$i++)echo "<tr><td>&#38;#$i;<td>&#".$i.";"; ?></table>
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.