Come sfuggire alle doppie virgolette in un attributo title


195

Sto cercando di usare una stringa che contiene virgolette doppie nell'attributo title di un anchor. Finora ho provato questi:

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

e

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

Si prega di notare che l'uso di virgolette singole non è un'opzione.


18
@Haim leggi la domanda ... dice "le virgolette singole non sono un'opzione".
Nils Riedemann,

2
@harpax - Ero solo curioso di sapere perché le virgolette singole non sono un'opzione?
Bert F

3
Le virgolette singole non sono html valide.
skyfoot

1
Il tuo secondo esempio dovrebbe funzionare perfettamente. In quale browser vedi il problema?
Olly Hodgson,

1
@harpax: forse dovresti chiarire la richiesta "le virgolette singole non sono un'opzione". Avrei immaginato che tu citassi le virgolette singole "dentro" la "stringa" non sono un'opzione (come mostrate all'utente), ma solo capovolgere le virgolette singole e doppie come ha mostrato Haim sopra sarebbe OK.
Christian.K,

Risposte:


284

Questa variante -

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

È corretto e funziona come previsto: vedi le virgolette normali nella pagina renderizzata.


Sì. <a href="#" title="Foo &quot;Bar&quot;">Testing</a>e <a href="#" title="Smart quotes &#8221;Bar&#8220;">Testing too</a>lavora per me.
Olly Hodgson,

5
@Maris: Beh ... non vedo le virgolette normali nella pagina renderizzata quando faccio & quot; (Firefox, Chrome). Perché?
Krzysztof Trzos

@Maris, stesso problema qui. Vedi il testo "& quot;" appaiono in IE e Chrome quando l'utente passa il mouse sopra l'elemento.
rstackhouse,

Ha funzionato sorprendentemente con il contenuto html incorporato nell'attributo (affinché javascript producesse textarea modificabile):data-editable-note="<?php echo str_replace('"', '&quot;', $note); ?>"><?php echo mark::up($note); ?></div>
WEBjuju

23

Ecco uno snippet dei caratteri di escape HTML presi da una pagina memorizzata nella cache su 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

Il codice di escape &#34;può anche essere utilizzato al posto di &quot;.


3

L'utilizzo &quot;è il modo di farlo. Ho provato il tuo secondo frammento di codice e funziona sia in Firefox che in Internet Explorer.


2

Potrebbe funzionare con qualsiasi personaggio dall'elenco dei caratteri di escape HTML , ma ho avuto lo stesso problema con un progetto Java. Ho usato StringEscapeUtils.escapeHTML("Testing \" <br> <p>")e il titolo era <a href=".." title="Test&quot; &lt;br&gt; &lt;p&gt;">Testing</a>.

Ha funzionato solo per me quando ho cambiato StringEscapeUtils StringEscapeUtils.escapeJavascript("Testing \" <br> <p>")e ha funzionato in tutti i browser.


la migliore soluzione secondo me
Mohammed Rafeeq

Va bene se stai usando Java, ma poiché l'inquirente originale richiede HTML, forse questa non è un'opzione.
Paul,

1

Esiste almeno una situazione in cui l'utilizzo di virgolette singole non funziona e ciò avviene se si crea il markup "al volo" da JavaScript. Usa virgolette singole per contenere la stringa e quindi qualsiasi proprietà nel markup può avere virgolette doppie per il suo valore.


1

Forse puoi usare JavaScript per risolvere il tuo problema tra browser. Utilizza un diverso meccanismo di escape, uno con cui ovviamente hai già familiarità:

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

Non separa rigorosamente le funzioni di HTML, JavaScript e CSS nel modo in cui la gente ti vuole al giorno d'oggi, ma di chi hai bisogno per renderti felice? I tuoi utenti o tecnici non conosci?


Overkill quando l'esulto desiderato può essere raggiunto in un modo molto più semplice.
Paul,

-3

Puoi usare questo codice PHP per elencare caratteri speciali ...

<table border="1"><?php for($i=33;$i<9000;$i++)echo "<tr><td>&#38;#$i;<td>&#".$i.";"; ?></table>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.