htmlspecialchars()函数是PHP中一个常用的函数,其作用是将特殊字符转换成HTML实体,从而防止脚本注入或跨站点脚本攻击(XSS)。
htmlspecialchars(string $string, int $flags = ENT_COMPAT | ENT_HTML401, string|null $encoding = 'UTF-8', bool $double_encode = true) : string
htmlspecialchars()函数有四个参数:
需要注意的是,$flags、$encoding 和 $double_encode 参数在 PHP7.3 中被添加,如果在较早版本的 PHP 中使用时需要先检查 PHP 版本号。
htmlspecialchars()函数将转换后的字符串作为返回值。
下面是htmlspecialchars()函数的基本使用方法:
$str = '<p>Hello, World!</p>';
echo htmlspecialchars($str);
输出结果为:
<p>Hello, World!</p>
其中<和>为HTML实体,表示<和>符号。如果没有使用htmlspecialchars()函数,则输出结果为:
<p>Hello, World!</p>
这可能导致脚本注入或跨站点脚本攻击(XSS)。
htmlspecialchars()函数的转换规则由第二个参数$flags控制,默认为 ENT_COMPAT | ENT_HTML401。
以下是一些常用的标志:
如果需要在非UTF8编码下使用htmlspecialchars()函数,就需要使用第三个参数 $encoding 指定编码格式。
例如:
$str1 = "厦\t门";
$str2 = htmlspecialchars($str1, ENT_QUOTES, 'GBK');
echo $str2;
输出结果为:
木办
由于 htmlspecialchars() 函数会将原始字符串转义为 HTML 实体,所以直接输出时,实体会被作为普通文本显示。如果需要在 HTML 中显示 HTML 实体,则需要使用 HTML 实体解码函数 html_entity_decode() 将实体转换回来。
例如:
$str3 = '<p>This is a paragraph.</p>';
echo html_entity_decode($str3);
输出结果为:
<p>This is a paragraph.</p>
<form action="submit.php" method="post">
<label for="username">Username:</label>
<input type="text" name="username" id="username">
<input type="submit" value="Submit">
</form>
使用htmlspecialchars()函数对用户输入的用户名进行转义,输出到页面上:
$username = $_POST['username'];
echo 'Welcome, ' . htmlspecialchars($username) . '!';
如果使用用户输入的字符串直接输出到 HTML 页面上,将有可能导致脚本注入或跨站点脚本攻击(XSS)。
使用htmlspecialchars()函数转义用户输入,能够有效防止脚本注入或跨站点脚本攻击(XSS)。
例如:
$input = $_GET['input'];
echo 'Input: ' . htmlspecialchars($input);
如果输入字符串为:
<script>alert('XSS');</script>
使用htmlspecialchars()函数转义后,输出结果为:
<script>alert('XSS');</script>
XSS攻击被成功防止。
本文介绍了htmlspecialchars()函数的语法和参数,以及其在防止脚本注入或跨站点脚本攻击(XSS)中的应用。其中包括了htmlspecialchars()函数的基本使用方法,转换规则,字符编码,注意事项,以及两条实例说明。