PHP htmlspecialchars() 函数实例代码及用法大全
1. 什么是htmlspecialchars()函数?
htmlspecialchars()函数是PHP中一个常用的函数,其作用是将特殊字符转换成HTML实体,从而防止脚本注入或跨站点脚本攻击(XSS)。
2. htmlspecialchars()函数的语法
htmlspecialchars(string $string, int $flags = ENT_COMPAT | ENT_HTML401, string|null $encoding = 'UTF-8', bool $double_encode = true) : string
3. htmlspecialchars()函数的参数
htmlspecialchars()函数有四个参数:
- $string:必填参数,表示需要转换的字符串。
- $flags:可选参数,表示转换规则。默认情况下为 ENT_COMPAT | ENT_HTML401,常用的标志有 ENT_NOQUOTES、ENT_QUOTES 和 ENT_SUBSTITUTE。
- $encoding:可选参数,表示字符编码。默认为 UTF-8。
- $double_encode:可选参数,表示是否再次编码当前实体。默认为 true。
需要注意的是,$flags、$encoding 和 $double_encode 参数在 PHP7.3 中被添加,如果在较早版本的 PHP 中使用时需要先检查 PHP 版本号。
4. htmlspecialchars()函数的返回值
htmlspecialchars()函数将转换后的字符串作为返回值。
5. htmlspecialchars()函数的用法
下面是htmlspecialchars()函数的基本使用方法:
$str = '<p>Hello, World!</p>';
echo htmlspecialchars($str);
输出结果为:
<p>Hello, World!</p>
其中<和>为HTML实体,表示<和>符号。如果没有使用htmlspecialchars()函数,则输出结果为:
<p>Hello, World!</p>
这可能导致脚本注入或跨站点脚本攻击(XSS)。
5.1 htmlspecialchars()函数转换规则
htmlspecialchars()函数的转换规则由第二个参数$flags控制,默认为 ENT_COMPAT | ENT_HTML401。
以下是一些常用的标志:
- ENT_COMPAT:仅转换双引号(")。
- ENT_QUOTES:同时转换双引号和单引号("和')。
- ENT_NOQUOTES:不转换任何引号。
- ENT_HTML401:将引号转换为HTML4.01规范。
5.2 htmlspecialchars()函数的字符编码
如果需要在非UTF8编码下使用htmlspecialchars()函数,就需要使用第三个参数 $encoding 指定编码格式。
例如:
$str1 = "厦\t门";
$str2 = htmlspecialchars($str1, ENT_QUOTES, 'GBK');
echo $str2;
输出结果为:
木办
5.3 htmlspecialchars()函数的注意事项
由于 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>
6. 示例
6.1 示例1:在表单中使用htmlspecialchars()函数
<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) . '!';
6.2 示例2:防止XSS攻击
如果使用用户输入的字符串直接输出到 HTML 页面上,将有可能导致脚本注入或跨站点脚本攻击(XSS)。
使用htmlspecialchars()函数转义用户输入,能够有效防止脚本注入或跨站点脚本攻击(XSS)。
例如:
$input = $_GET['input'];
echo 'Input: ' . htmlspecialchars($input);
如果输入字符串为:
<script>alert('XSS');</script>
使用htmlspecialchars()函数转义后,输出结果为:
<script>alert('XSS');</script>
XSS攻击被成功防止。
7. 总结
本文介绍了htmlspecialchars()函数的语法和参数,以及其在防止脚本注入或跨站点脚本攻击(XSS)中的应用。其中包括了htmlspecialchars()函数的基本使用方法,转换规则,字符编码,注意事项,以及两条实例说明。