PHP функция htmlspecialchars()

Пример

Преобразовать предопределенные символы "<" (меньше) и ">" (больше) в HTML-символы:

<?php
$str = "This is some <b>bold</b> text.";
echo htmlspecialchars($str);
?>

HTML-вывод вышеуказанного кода таков (просмотрите исходный код):

<!DOCTYPE html>
<html>
<body>
This is some <b>bold</b> text.
</body>
</html>

Вывод браузера для вышеуказанного кода:

This is some <b>bold</b> text.

Запуск примера

Определение и использование

Функция htmlspecialchars() преобразует предопределенные символы в HTML-символы.

Предопределенные символы:

  • & (и) становится &
  • " (двойная кавычка) становится "
  • ' (одинарная кавычка) становится '
  • < (меньше) становится <
  • > (больше) становится >

Совет:Чтобы преобразовать специальные HTML-символы в символы, используйте htmlspecialchars_decode() Функция.

Синтаксис

htmlspecialchars(string,flags,character-set,double_encode)
Параметры Описание
string Обязателен. Определяет строку, которую нужно преобразовать.
flags

Опционально. Определяет, как обрабатывать кавычки, недопустимые коды и какой тип документа использовать.

Доступные типы кавычек:

  • ENT_COMPAT - По умолчанию. Кодировать только двойные кавычки.
  • ENT_QUOTES - Кодировать как двойные, так и одинарные кавычки.
  • ENT_NOQUOTES - Не кодировать никакие кавычки.

Недопустимые коды:

  • ENT_IGNORE - Игнорировать недопустимые коды вместо того, чтобы функция возвращала пустую строку. Это следует尽量避免, так как это может повлиять на безопасность.
  • ENT_SUBSTITUTE - Заменять недопустимые коды на указанный символ с кодовой заменой Unicode U+FFFD (UTF-8) или &#FFFD; вместо того, чтобы возвращать пустую строку.
  • ENT_DISALLOWED - Заменять недопустимые символы в указанном типе документа на кодовую замену Unicode U+FFFD (UTF-8) или &#FFFD;.

规定使用的文档类型的附加 flags:

  • ENT_HTML401 - 默认。作为 HTML 4.01 处理代码。
  • ENT_HTML5 - 作为 HTML 5 处理代码。
  • ENT_XML1 - 作为 XML 1 处理代码。
  • ENT_XHTML - 作为 XHTML 处理代码。
character-set

可选。一个规定了要使用的字符集的字符串。

允许的值:

  • UTF-8 - 默认。ASCII 兼容多字节的 8 位 Unicode
  • ISO-8859-1 - 西欧
  • ISO-8859-15 - 西欧(加入欧元符号 + ISO-8859-1 中丢失的法语和芬兰语字母)
  • cp866 - DOS 专用 Cyrillic 字符集
  • cp1251 - Windows 专用 Cyrillic 字符集
  • cp1252 - Windows 专用西欧字符集
  • KOI8-R - 俄语
  • BIG5 - 繁体中文,主要在台湾使用
  • GB2312 - 简体中文,国家标准字符集
  • BIG5-HKSCS - 带香港扩展的 Big5
  • Shift_JIS - 日语
  • EUC-JP - 日语
  • MacRoman - Mac 操作系统使用的字符集

注释:在 PHP 5.4 之前的版本,无法被识别的字符集将被忽略并由 ISO-8859-1 替代。自 PHP 5.4 起,无法被识别的字符集将被忽略并由 UTF-8 替代。

double_encode

可选。布尔值,规定了是否编码已存在的 HTML 实体。

  • TRUE - 默认。将对每个实体进行转换。
  • FALSE - 不会对已存在的 HTML 实体进行编码。

技术细节

返回值:

返回被转换的字符串。

如果 string 包含无效的编码,则返回一个空的字符串,除非设置了 ENT_IGNORE 或者 ENT_SUBSTITUTE 标志。

PHP 版本: 4+
更新日志:

在 PHP 5 中,character-set 参数的默认值改为 UTF-8。

在 PHP 5.4 中,新增了:ENT_SUBSTITUTE、ENT_DISALLOWED、ENT_HTML401、ENT_HTML5、ENT_XML1 和 ENT_XHTML。

在 PHP 5.3 中,新增了 ENT_IGNORE。

在 PHP 5.2.3 中,新增了 double_encode Параметры.

В PHP 4.1 была добавлена character-set Параметры.

Более примеров

Пример 1

Преобразовать некоторые предопределенные символы в HTML-символы:

<?php
$str = "Bill & 'Steve'";
echo htmlspecialchars($str, ENT_COMPAT); // Преобразование только двойных кавычек
echo "<br>";
echo htmlspecialchars($str, ENT_QUOTES); // Преобразование двойных и одинарных кавычек
echo "<br>";
echo htmlspecialchars($str, ENT_NOQUOTES); // Не преобразовывать какие-либо кавычки
?>

HTML-вывод вышеуказанного кода таков (просмотрите исходный код):

<!DOCTYPE html>
<html>
<body>
Bill & 'Steve'<br>
Bill & 'Steve'<br>
Bill & 'Steve'
</body>
</html>

Вывод браузера для вышеуказанного кода:

Bill & 'Steve'
Bill & 'Steve'
Bill & 'Steve'

Запуск примера

Пример 2

Преобразовать двойные кавычки в HTML-символы:

<?php
$str = 'I love "PHP".';
echo htmlspecialchars($str, ENT_QUOTES); // Преобразование двойных и одинарных кавычек
?>

HTML-вывод вышеуказанного кода таков (просмотрите исходный код):

<!DOCTYPE html>
<html>
<body>
Я люблю "PHP"
</body>
</html>

Вывод браузера для вышеуказанного кода:

Я люблю "PHP".

Запуск примера