PHPhtmlentities()函数用法简介
php htmlentities()函数是将字符串中的特殊字符转换为HTML实体,主要是为了保证 HTML 的正确性和安全性而设计的。可以用来避免 XSS 攻击和 Cross-site scripting 的风险。本文主要介绍 PHP htmlentities() 函数的用法,并给出一些实际的例子。
1.函数语法
htmlentities(string $string, int $flags = ENT_COMPAT | ENT_HTML401, string $encoding = ini_get("default_charset"), bool $double_encode = true) : string
- $string :转换的字符串。
- $flags:指出应该转换哪些特殊字符,有以下几个取值:
- ENT_COMPAT:默认值,它会将一个双引号字符转为 ",而不会将单引号字符 ' 转换。
- ENT_QUOTES:将双引号字符转换为 ",也将单引号字符转换为 '。
- ENT_NOQUOTES:不转换任何引号。
- $encoding:指定字符编码,默认为 ini_get("default_charset")。
- $double_encode:设置是否编码已经编码的特殊字符,避免编码两次。
2.实例演示
htmlentities() 函数在 Web 开发中的实际应用非常广泛,接下来我们来看几种常见的用法:
2.1. HTML 标签转义
本函数的主要应用场景是对 HTML 代码中的标签和属性名进行转义,以避免 XSS 漏洞。比如:
<?php
$string = '<a href="http://www.baidu.com">baidu</a>';
echo htmlentities($string);
?>
结果:
<a href="http://www.baidu.com">baidu</a>
在上面的例子中,我们使用 htmlentities() 将链接的 href 属性编码,以免其包含恶意脚本。
2.2. 字符串转义
函数 htmlentites() 还可用于转义字符串中的特殊字符,比如双引号、单引号、大于号、小于号、和符号等等。
<?php
$string = 'It\'s good to have a <a href=“#”>link</a> in your webpage.';
echo htmlentities($string, ENT_QUOTES);
?>
结果:
It's good to have a <a href="#">link</a> in your webpage.
上面的用例转义了字符串的引号、小于号、大于号及符号等常见的特殊字符。
2.3. 转义数组
如果我们需要在表单中加入一个包含 HTML 代码的数组,则需要对该数组中的每个元素进行 htmlentites() 转义。比如:
<?php
$array = array('John'=>'<h1>John</h1>', 'Mary'=>'<h2>Mary</h2>', 'Peter'=>'<h3>Peter</h3>');
echo "<table><tr><th>Name</th><th>Message</th></tr>";
foreach ($array as $name => $message) {
echo "<tr><td>".htmlentities($name, ENT_QUOTES)."</td><td>".htmlentities($message)."</td></tr>";
}
echo "</table>";
?>
结果:
Name Message
John John
Mary Mary
Peter Peter
上面的用例中,我们将每个字符串的标签进行了转义,用表格显示了一个包含 HTML 代码的数组。
3.注意事项
- 应注意函数中所用的字符编码,不同的编码可能导致字符的转化不良序列化的问题。
- 如有必要,应在输出之前对编码进行处理。
- 转义所有用户传递的数据,避免 XSS 攻击等安全隐患。
