📜  php 中的 ent_quotes(1)

📅  最后修改于: 2023-12-03 15:18:27.484000             🧑  作者: Mango

PHP 中的 htmlspecialchars

在 PHP 中,有时需要将字符串中的特殊字符进行转义,以防止代码执行、SQL 注入、XSS 攻击等安全风险。其中,htmlspecialchars 函数就是一种常见的转义函数。

语法及参数

htmlspecialchars 函数的语法如下:

string htmlspecialchars ( string $string , int $flags = ENT_COMPAT | ENT_HTML401 , string|null $encoding = null , bool $double_encode = true )

其中,$string 表示要转义的字符串;$flags 表示转义的选项,可以取以下常量:

  • ENT_COMPAT:默认值,仅转换双引号,忽略单引号。
  • ENT_QUOTES:同时转换双引号和单引号。
  • ENT_NOQUOTES:不转换任何引号。
  • ENT_HTML401:默认值,转换 HTML 4.01 规范字符。
  • ENT_XML1:转换 XML 1 规范字符。
  • ENT_XHTML:转换 XHTML 规范字符。
  • ENT_HTML5:转换 HTML 5 规范字符。
  • ENT_SUBSTITUTE:用 U+FFFD 替换非法字符,不抛出警告。
  • ENT_DISALLOWED:抛出一个 E_WARNING 错误,当发现字符串含有不合法字符时。
  • ENT_HTML401ENT_HTML5 不能与 ENT_XML1ENT_XHTML 一起使用。

$encoding 表示要转义的字符集(默认为 ISO-8859-1);$double_encode 表示是否将已经转义的字符再次进行转义(默认为 true)。

使用示例

下面是一些使用 htmlspecialchars 函数进行转义的示例:

// 转义双引号
$str = 'I "love" PHP!';
echo htmlspecialchars($str, ENT_COMPAT); // 输出:I "love" PHP!

// 转义单引号
$str = "I 'love' PHP!";
echo htmlspecialchars($str, ENT_COMPAT); // 输出:I 'love' PHP!

// 转义双引号和单引号
$str = 'I "love" PHP, but it\'s hard.';
echo htmlspecialchars($str, ENT_QUOTES); // 输出:I "love" PHP, but it's hard.

// 不转义任何引号
$str = 'I "love" PHP, but it\'s hard.';
echo htmlspecialchars($str, ENT_NOQUOTES); // 输出:I "love" PHP, but it's hard.

// 转义 HTML 4.01 规范字符
$str = '<script>alert("hello world!");</script>';
echo htmlspecialchars($str, ENT_COMPAT, 'UTF-8', false); // 输出:&lt;script&gt;alert(&quot;hello world!&quot;);&lt;/script&gt;

// 转义 HTML 5 规范字符
$str = 'Hello <mark>world</mark>!';
echo htmlspecialchars($str, ENT_HTML5); // 输出:Hello &lt;mark&gt;world&lt;/mark&gt;!

// 转义非法字符
$str = "I'm \"loved\".<br> \x00\x7f\x01\x80\u{10ffff}";
echo htmlspecialchars($str, ENT_NOQUOTES | ENT_SUBSTITUTE); // 输出:I'm &quot;loved&quot;.&lt;br&gt; ��&#127;�&#128;\u{10ffff}
注意事项
  • 使用 htmlspecialchars 函数时,务必注意当前字符集是否匹配,否则可能出现乱码或编码错误的问题。
  • htmlspecialchars 函数只能用于转义 HTML 字符,不能用于转义 SQL 字符或 URL 参数,在进行相应操作时,应使用其他转义函数,如 addslashesmysqli_real_escape_stringurlencode 等。
  • 在某些情况下(如输出 JSON、生成 RSS 等),需要先将字符串转义为 Unicode,再通过 htmlspecialchars 函数转义为 HTML 字符,避免编码不兼容的问题。
总结

htmlspecialchars 函数可以帮助 PHP 程序员安全地处理并输出包含特殊字符的字符串,以保护 Web 应用程序和用户数据。合理使用该函数,可以有效预防 Web 安全风险。