URL / HTML Escapeing / Кодировка - PullRequest
       10

URL / HTML Escapeing / Кодировка

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

Меня всегда путали с кодировкой URL / HTML / Escaping. Я использую PHP, поэтому хочу кое-что прояснить.

Могу ли я сказать, что я всегда должен использовать

  • urlencode: для отдельных частей строки запроса

    $url = 'http://test.com?param1=' . urlencode('some data') . '&param2=' . urlencode('something else');
    
  • htmlentities: для экранирования специальных символов, таких как <>, для корректной обработки браузером

Были бы другие места, где я мог бы использовать каждую функцию. Я не очень хорош во всех этих побегах, всегда смущен ими

Ответы [ 2 ]

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

Во-первых, вы не должны использовать htmlentites примерно в 99% случаев.Вместо этого вы должны использовать htmlspecialchars() для экранирования текста для использования в документах xml / html.htmlentities полезны только для отображения символов, которые не могут отображаться в используемом вами исходном наборе символов (это полезно, если ваши страницы находятся в ASCII, но у вас есть некоторые символы UTF-8, которые вы хотели бы отобразить).Вместо этого просто сделайте целую страницу UTF-8 (это не сложно) и покончите с этим.

Что касается urlencode, вы ударяете ноготь по голове.

ИтакПодводя итог:

  • Внутри HTML:

    <b><?php echo htmlspecialchars($string, ENT_QUOTES, "UTF-8"); ?></b>
    
  • Внутри URL:

    $url = '?foo='.urlencode('bar');
    
18 голосов
/ 24 января 2011

Это примерно так. Хотя - htmlspecialchars - это хорошо, если вы понимаете свои кодировки. Что вы должны сделать в любом случае. Поэтому я склонен использовать это, поэтому я бы узнал рано, если бы я все испортил.

Также обратите внимание, что если вы поместите URL-адрес в контекст HTML (скажем, в href тега a), вам нужно избежать этого. Так что вы часто будете видеть что-то вроде:

echo "<a href='" . htmlspecialchars("?foo=".urlencode($foo)) . "'>clicky</a>"
...