📅  最后修改于: 2023-12-03 15:18:27.484000             🧑  作者: Mango
在 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_HTML401
和 ENT_HTML5
不能与 ENT_XML1
或 ENT_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); // 输出:<script>alert("hello world!");</script>
// 转义 HTML 5 规范字符
$str = 'Hello <mark>world</mark>!';
echo htmlspecialchars($str, ENT_HTML5); // 输出:Hello <mark>world</mark>!
// 转义非法字符
$str = "I'm \"loved\".<br> \x00\x7f\x01\x80\u{10ffff}";
echo htmlspecialchars($str, ENT_NOQUOTES | ENT_SUBSTITUTE); // 输出:I'm "loved".<br> ���€\u{10ffff}
htmlspecialchars
函数时,务必注意当前字符集是否匹配,否则可能出现乱码或编码错误的问题。htmlspecialchars
函数只能用于转义 HTML 字符,不能用于转义 SQL 字符或 URL 参数,在进行相应操作时,应使用其他转义函数,如 addslashes
、mysqli_real_escape_string
、urlencode
等。htmlspecialchars
函数转义为 HTML 字符,避免编码不兼容的问题。htmlspecialchars
函数可以帮助 PHP 程序员安全地处理并输出包含特殊字符的字符串,以保护 Web 应用程序和用户数据。合理使用该函数,可以有效预防 Web 安全风险。