Як уникнути подвійних лапок у атрибуті заголовка


195

Я намагаюся використовувати рядок, який містить подвійні лапки в атрибуті заголовка якоря. Поки я спробував це:

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

і

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

Зверніть увагу, що використання одинарних лапок - це не варіант.


18
@Haim прочитав питання ... в ньому сказано: "Одиночні цитати - це не варіант".
Нілс Рідеманн

2
@harpax - Мені було просто цікаво, чому окремі цитати - це не варіант?
Берт F

3
Одиночні котирування не є дійсними html.
skyfoot

1
Ваш другий приклад повинен працювати абсолютно ідеально. У якому браузері ви бачите проблему?
Оллі Ходжсон

1
@harpax: можливо, вам слід уточнити, що "єдині котирування не є варіантом". Я б міг здогадатися, що ви однакові лапки "всередині" в "рядку" - це не варіант (як відображається користувачеві), а просто гортання одинарних та подвійних лапок, як Хаїм показав вище, було б добре.
Крістіан.К

Відповіді:


284

Цей варіант -

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

Це правильно, і воно працює, як і очікувалося - ви бачите звичайні лапки на відображеній сторінці.


Так. <a href="#" title="Foo &quot;Bar&quot;">Testing</a>і <a href="#" title="Smart quotes &#8221;Bar&#8220;">Testing too</a>працюй для мене.
Оллі Ходжсон

5
@Maris: Ну ... я не бачу нормальних лапок на відображеній сторінці, коли я роблю & quot; (Firefox, Chrome). Чому?
Кшиштоф Тцос

@Maris, та ж проблема тут. Дивіться текст "& quot;" з'являються як в IE, так і в Chrome, коли користувач наводить курсор на елемент.
rstackhouse

Дивовижно працював із вмістом html, вбудованим в атрибут (для javascript для створення редагованої textarea):data-editable-note="<?php echo str_replace('"', '&quot;', $note); ?>"><?php echo mark::up($note); ?></div>
WEBjuju

23

Ось фрагмент символів втечі HTML, взятих із кешованої сторінки на 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    —   


3

Використання &quot;- це спосіб це зробити. Я спробував ваш другий фрагмент коду, і він працює як у Firefox, так і в Internet Explorer.


2

Це може працювати з будь-яким символом зі списку символів HTML Escape , але у мене була та сама проблема з проектом Java. Я використовував StringEscapeUtils.escapeHTML("Testing \" <br> <p>")і назва була<a href=".." title="Test&quot; &lt;br&gt; &lt;p&gt;">Testing</a> .

Це працювало для мене лише тоді, коли я змінив StringEscapeUtils StringEscapeUtils.escapeJavascript("Testing \" <br> <p>")і працював у кожному браузері.


найкраще рішення, на мій погляд,
Мухаммед Рафік

Добре, якщо ви використовуєте Java, але оскільки оригінальний запитуючий запитує HTML, можливо, це не варіант.
Пол

1

Принаймні одна ситуація, коли використання одинарних лапок не вийде, і це якщо ви створюєте розмітку "на льоту" з JavaScript. Ви використовуєте одинарні лапки, щоб містити рядок, і тоді будь-яке властивість у розмітці може мати подвійні лапки за своїм значенням.


1

Можливо, ви можете використовувати JavaScript для вирішення проблеми з перехресним браузером. Він використовує інший механізм втечі, той, з яким ви, очевидно, вже знайомі:

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

Він не чітко розмежовує функції HTML, JavaScript та CSS так, як бажають люди сьогодні, але кому потрібно щасливі? Ваші користувачі чи техники, яких ви не знаєте?


Перевищення, коли бажаний результат може бути досягнутий набагато простіше.
Павло

-3

Ви можете використовувати цей PHP-код для списку спеціальних символів ...

<table border="1"><?php for($i=33;$i<9000;$i++)echo "<tr><td>&#38;#$i;<td>&#".$i.";"; ?></table>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.