URL / HTML Escapeing / Encoding, действительно ли требуется экранирование `&` от URL? - PullRequest
1 голос
/ 24 января 2011

Я всегда был очень запутан с выходом URL / HTML.Совсем недавно я посмотрел глубже.Затем, взглянув на PHP Docs для urlencode

$query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar);
echo '<a href="mycgi?' . htmlentities($query_string) . '">';

, я понял, что в большинстве строк запросов, которые кажутся похожими, нужно экранировать &.Но, похоже, работает без побега.Интересно, а зачем это нужно?

Ответы [ 2 ]

4 голосов
/ 24 января 2011

Экранирование & в &amp; требуется в HTML, но в любом случае работает в большинстве браузеров.Если этого не произойдет, 90% интернета сломается.:) Это все еще хороший стиль, чтобы избегать амперсандов, и это необходимо для документа, чтобы пройти проверку.

См. Этот документ W3C для некоторого хорошего фона почему (текст фокусируется на конкретномповедение PHP, но это на самом деле не имеет значения): Амперсанды, PHP-сессии и действительный HTML .Денежная цитата (выделение моя):

Для отображения зарезервированных символов HTML и XHTML предоставляют механизм, называемый ссылками на символы.Синтаксис этого кода:

  • амперсанд
  • "код" для ссылочного символа
  • точка с запятой
  • Например, "символ «меньше» представлен как &lt;.

Придание амперсанду специального значения делает его, например, <зарезервированным символом, <strong>, поэтому он также должен быть представлен объектом для негодля использования в документе - &amp;

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

Ты прав.

Внутри документа HTML символ амперсанда (&) не допускается, за исключением случаев указания прав (например, &amp;).

Следовательно, такой код, как <a href='mycgi?foo=1&bar=2'>, является недействительным HTML. Он должен выдать ошибку, если вы запустите его через валидатор.

Большинство (всех?) Браузеров справятся с этим без ошибок. Здесь нет никакой двусмысленности, так что это сработает.

Тем не менее, все равно хорошей идеей будет преобразовать их в сущности, потому что всегда существует вероятность появления неоднозначности - например, если в вашем URL есть параметр с именем amp вместо bar как браузер справится с этим? Это не совсем ясно. Поэтому вам следует преобразовать их все в сущности, чтобы избежать каких-либо проблем в будущем, даже если у вас их нет сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...