2011-01-24 1 views
14

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

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

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

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

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

ответ

29

Во-первых, вы не должны использовать 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

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

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

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

Великий ответ. Это пример того, как правильно сбежать из контекста в другом контексте. Важно отметить, что даже несмотря на то, что urlencode никогда не выводит какие-либо специальные html-символы, чтобы вызвать какие-либо проблемы, не помешает избежать всего содержимого атрибута html. – Phil

 Смежные вопросы

  • Нет связанных вопросов^_^