Амперсанд в тексте описания ссылки? - PullRequest
3 голосов
/ 01 января 2011

Я проверяю свой сайт, используя http://validator.w3.org, и у меня возникла проблема, связанная с & в тексте описания моей ссылки.

Это взято из источника:

<a class='tag' href='/php/iphone software.php?function=developer&amp;dev=witch%26wizards+inc.&amp;store=143441'>witch&wizards inc.</a>

Это дает эту ошибку в валидаторе:

Строка 188, столбец 540: невозможно создать системный идентификатор для "волшебников" общего объекта

… 6wizards + inc. & Store = 143441 '> witch & wizards inc.

reference В документе была найдена ссылка на сущность, но не определена ссылка с этим именем

Если я urlencode описания, тогда проверка проходит, но пользователь видит текст, отображаемый urlencoded, т.е.

Разработчик ведьм% 26wizards + inc.

Тем не менее, я считаю, что это гораздо удобнее для пользователя, если это было отображено в незашифрованном виде, то есть

Разработчик ведьм и волшебников вкл.

Есть ли способ пройти проверку, но при этом отображается удобный текст?

Ответы [ 3 ]

8 голосов
/ 01 января 2011

Simple:

Для амперсандов как части строки запроса значения , URL кодирует их в %26.

Для отображения амперсандов в виде текста или амперсандов, используемых для разделения строки запроса пары ключ-значение - другими словами, почти для всего остального - HTML кодирует их в свои сущности &amp;.

Ваш HTML должен выглядеть следующим образом:

<a class='tag' href='/php/iphone%20software.php?function=developer&amp;dev=witch%26wizards+inc.&amp;store=143441'>witch&amp;wizards inc.</a>
2 голосов
/ 01 января 2011

Попробуйте использовать &amp; вместо %26

РЕДАКТИРОВАТЬ: Woah & amp; расширен на SO.

1 голос
/ 01 января 2011

Кодировать & в URL-адресе как %26, а не &amp; (также кодировать пробел как %20) и кодировать & в отображаемом тексте как &amp;:

<a class='tag' href='/php/iphone%20software.php?function=developer%26dev=witch%26wizards+inc.%26store=143441'>witch&amp;wizards inc.</a>

Обратите внимание, что существует разница между кодировкой URL , которые используются для кодирования URL-адресов, и сущностями HTML , используемыми для кодирования отображаемого текста в HTML.Например, если вы хотите отобразить текст <br/> в HTML, вы бы закодировали его как &lt;br/&gt;, но в URL-адресе это будет %3Cbr%2F%3E.

Использовать htmlentities() для кодирования специальных символов как объектов HTML в PHP.

...