URL/HTML-экранирование/кодирование
Меня всегда путали с кодировкой/экранированием URL/HTML. Я использую PHP, поэтому хочу очистить что-то.
Могу ли я сказать, что я всегда должен использовать
-
urlencode
: для отдельных частей строки запроса
$url = 'http://test.com?param1=' . urlencode('some data') . '¶m2=' . urlencode('something else');
-
htmlentities
: для экранирования специальных символов, таких как <>
, чтобы при правильном отображении браузером
Были ли какие-либо другие места, которые я мог бы использовать для каждой функции. Я не очень хорош во всех этих побегах, всегда смущен ими
Ответы
Ответ 1
Во-первых, вы не должны использовать 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');
Ответ 2
Что о правильном. Хотя - htmlspecialchars
все в порядке, пока вы получаете свои кодировки прямо. Что вы должны делать в любом случае. Поэтому я стараюсь использовать это, поэтому я бы узнал раньше, если бы испортил его.
Также обратите внимание, что если вы поместите URL-адрес в html-контекст (скажем - в href
a
-tag), вам нужно избежать этого. Поэтому вы часто увидите что-то вроде:
echo "<a href='" . htmlspecialchars("?foo=".urlencode($foo)) . "'>clicky</a>"