Из документации PHP для htmlentities:
Эта функция идентична
htmlspecialchars()
во всех отношениях, кроме сhtmlentities()
, все символы, которые имеют эквиваленты символьной сущности HTML, переводятся в эти объекты.
Из документации PHP для htmlspecialchars:
символы Certain имеют специальное значение в HTML и должны быть представлены объектами HTML, если они должны сохранить свои значения. Эта функция возвращает строку с некоторыми из этих сделанных преобразований; сделанные переводы являются самыми полезными для повседневного веб-программирования. Если Вы требуете, чтобы вся символьная сущность HTML была переведена, используйте
htmlentities()
вместо этого.
различие - то, что кодируется. Выбор - все (объекты) или "специальные" символы, как амперсанд, двойные и одинарные кавычки, меньше, чем, и больше, чем (specialchars).
я предпочитаю использовать htmlspecialchars
, когда это возможно.
, Например:
echo htmlentities('<Il était une fois un être>.');
// Output: <Il était une fois un être>.
// ^^^^^^^^ ^^^^^^^
echo htmlspecialchars('<Il était une fois un être>.');
// Output: <Il était une fois un être>.
// ^ ^
Вы, вероятно, хотите использовать некоторую кодировку символов Unicode, например UTF-8 и htmlspecialchars. Поскольку нет никакой потребность генерировать "объекты HTML" для "всех применимых символов" (именно это htmlentities делает согласно документации), если это уже находится в Вашем наборе символов.
Потому что:
htmlentities
заменяет больше символов, чем htmlspecialchars
. В этом нет необходимости, поскольку PHP-скрипт становится менее эффективным, а результирующий HTML-код — менее читаемым. htmlentities
необходим только в том случае, если ваши страницы используют такие кодировки, как ASCII или LATIN-1 вместо UTF-8, и вы обрабатываете данные в кодировке, отличной от кодировки страницы.
htmlspecialchars()
выполняет минимальное кодирование, чтобы ваша строка не анализировалась как HTML. Это сделает вашу строку более удобочитаемой, чем если бы вы использовали htmlentities()
для кодирования абсолютно всего, что имеет кодировку.
htmlspecialchars
можно использовать:
Когда нет необходимости кодировать все символы, которые имеют эквиваленты в HTML.
Если вы знаете, что кодировка страницы соответствует специальным символам текста, зачем вам использовать htmlentities
? htmlspecialchars
очень прост и требует меньше кода для отправки клиенту.
Например:
echo htmlentities('.');
// Вывод: .
// ^^^^^^^^ ^^^^^^^
echo htmlspecialchars('.');
// Вывод: .
// ^ ^
Второй короче и не вызывает проблем, если установлена кодировка ISO-8859-1.
Когда данные будут обрабатываться не только через браузер (чтобы избежать декодирования HTML-сущностей),
Если на выходе будет XML (см. ответ Artefacto).