Jak uniknąć podwójnych cudzysłowów w atrybucie tytułu

195

Próbuję użyć ciągu znaków, który zawiera podwójne cudzysłowy w atrybucie tytułu kotwicy. Do tej pory próbowałem tych:

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

i

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

Należy pamiętać, że stosowanie pojedynczych cudzysłowów nie jest opcją.

harpax
źródło
18
@Haim przeczytał pytanie… napisano: „pojedyncze cytaty nie są opcją”.
Nils Riedemann,
2
@harpax - Byłem ciekawy, dlaczego pojedyncze cytaty nie są opcją?
Bert F
3
Pojedyncze cudzysłowy nie są poprawne HTML.
skyfoot
1
Twój drugi przykład powinien działać absolutnie idealnie. W jakiej przeglądarce widzisz problem?
Olly Hodgson,
1
@harpax: być może powinieneś wyjaśnić, że „pojedyncze cudzysłowy nie są opcją”. Domyślam się, że wspominając o pojedynczych cudzysłowach „wewnątrz” ciągu „nie” jest opcją (wyświetlaną użytkownikowi), ale po prostu odwracanie pojedynczych i podwójnych cudzysłowów, jak pokazał Haim powyżej, byłoby w porządku.
Christian.K

Odpowiedzi:

284

Ten wariant -

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

Jest poprawny i działa zgodnie z oczekiwaniami - na renderowanej stronie widać normalne cytaty.

Māris Kiseļovs
źródło
Tak. <a href="#" title="Foo &quot;Bar&quot;">Testing</a>i <a href="#" title="Smart quotes &#8221;Bar&#8220;">Testing too</a>pracuj dla mnie.
Olly Hodgson,
5
@Maris: Cóż ... nie widzę normalnych cytatów na renderowanej stronie, gdy robię & quot; (Firefox, Chrome). Czemu?
Krzysztof Trzos
@Maris, ten sam problem tutaj. Zobacz tekst „& quot;” pojawiają się zarówno w przeglądarce IE, jak i Chrome, gdy użytkownik najedzie myszką na element.
rstackhouse
Zadziwiająco działało z zawartością HTML osadzoną w atrybucie (dla javascript do tworzenia edytowalnego data-editable-note="<?php echo str_replace('"', '&quot;', $note); ?>"><?php echo mark::up($note); ?></div>
obszaru tekstowego
23

Oto fragment znaków ucieczki HTML pobranych ze strony z pamięci podręcznej na 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    —   
Dave
źródło
9

&#34;Zamiast tego można również użyć kodu ucieczki &quot;.

Fredley
źródło
3

Używanie &quot;jest na to sposobem. Wypróbowałem Twój drugi fragment kodu i działa on zarówno w przeglądarce Firefox, jak i Internet Explorer.

TheCee
źródło
2

Może działać z dowolnym znakiem z listy znaków HTML Escape , ale miałem ten sam problem z projektem Java. Użyłem StringEscapeUtils.escapeHTML("Testing \" <br> <p>")i tytuł był <a href=".." title="Test&quot; &lt;br&gt; &lt;p&gt;">Testing</a>.

Działa to tylko dla mnie, gdy zmieniłem StringEscapeUtils na StringEscapeUtils.escapeJavascript("Testing \" <br> <p>")i działało w każdej przeglądarce.

Rodrigo Horta
źródło
moim zdaniem najlepsze rozwiązanie
Mohammed Rafeeq
Dobrze, jeśli używasz Javy, ale ponieważ pierwotny pytający prosi o HTML, być może nie jest to opcja.
Paul
1

Jest co najmniej jedna sytuacja, w której użycie pojedynczych cudzysłowów nie zadziała, to znaczy, jeśli tworzysz znaczniki „w locie” z JavaScript. Używasz pojedynczych cudzysłowów, aby zawrzeć ciąg, a następnie dowolna właściwość w znacznikach może zawierać podwójne cudzysłowy dla jego wartości.

cvadillo
źródło
1

Być może możesz użyć JavaScript, aby rozwiązać problem w różnych przeglądarkach. Używa innego mechanizmu ucieczki, z którym oczywiście już znasz:

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

Nie oddziela ściśle funkcji HTML, JavaScript i CSS tak, jak chcą ludzie, ale kogo musisz uszczęśliwić? Twoi użytkownicy lub technicy, których nie znasz?

WebManWalking
źródło
Przesadzaj, gdy pożądany esencję można osiągnąć w znacznie prostszy sposób.
Paul
-3

Możesz użyć tego kodu PHP, aby wyświetlić znaki specjalne ...

<table border="1"><?php for($i=33;$i<9000;$i++)echo "<tr><td>&#38;#$i;<td>&#".$i.";"; ?></table>
użytkownik6000975
źródło