函数名称:htmlspecialchars()
函数说明:htmlspecialchars() 函数用于将特殊字符转换为 HTML 实体,以防止 XSS(跨站脚本攻击)攻击。
函数语法:htmlspecialchars(string $string, int $flags = ENT_COMPAT | ENT_HTML401, string|null $encoding = null, bool $double_encode = true): string
参数说明:
- $string:必需,要转换的字符串。
- $flags:可选,用于指定转换的规则。默认为 ENT_COMPAT | ENT_HTML401,表示将双引号转换为实体,其他特殊字符保持不变。可选的标志有:
- ENT_COMPAT:默认值,仅将双引号转换为实体。
- ENT_QUOTES:将双引号和单引号都转换为实体。
- ENT_NOQUOTES:不转换任何引号。
- ENT_HTML401:将字符转换为 HTML 4.01 实体。
- ENT_XML1:将字符转换为 XML 1 实体。
- ENT_XHTML:将字符转换为 XHTML 实体。
- ENT_HTML5:将字符转换为 HTML 5 实体。
- $encoding:可选,指定要使用的字符编码。默认为 null,表示使用当前脚本的字符编码。
- $double_encode:可选,指定是否对已经转换的实体再次进行转换。默认为 true,表示转换两次。
返回值:返回转换后的字符串。
示例:
- 基本用法:
$str = 'This is a "quote" <tag>.';
$encoded_str = htmlspecialchars($str);
echo $encoded_str;
// 输出:This is a "quote" <tag>.
- 指定转换规则和字符编码:
$str = 'This is a "quote" <tag>.';
$encoded_str = htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
echo $encoded_str;
// 输出:This is a "quote" <tag>.
- 禁止对已转换的实体再次进行转换:
$str = 'This is a "quote" <tag>.';
$encoded_str = htmlspecialchars($str, ENT_QUOTES, 'UTF-8', false);
echo $encoded_str;
// 输出:This is a "quote" <tag>.
注意事项:
- htmlspecialchars() 函数只转换特殊字符,不会转换整个 HTML 标签,因此并不能完全阻止 XSS 攻击,仍然需要其他安全措施。
- 在输出用户输入的内容时,务必使用 htmlspecialchars() 函数进行转换,以避免潜在的安全风险。