欢迎访问宙启技术站
智能推送

PHPhtmlentities()函数用法简介

发布时间:2023-06-21 13:13:10

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 &lt;a href=&ldquo;#&rdquo;&gt;link&lt;/a&gt; in your webpage.';

    echo htmlentities($string, ENT_QUOTES);

?>

结果:

It's good to have a <a href="#"&gt;link</a> in your webpage.

上面的用例转义了字符串的引号、小于号、大于号及符号等常见的特殊字符。

2.3. 转义数组

如果我们需要在表单中加入一个包含 HTML 代码的数组,则需要对该数组中的每个元素进行 htmlentites() 转义。比如:

<?php

    $array = array('John'=>'&lt;h1&gt;John&lt;/h1&gt;', 'Mary'=>'&lt;h2&gt;Mary&lt;/h2&gt;', 'Peter'=>'&lt;h3&gt;Peter&lt;/h3&gt;');

    echo "&lt;table&gt;&lt;tr&gt;&lt;th&gt;Name&lt;/th&gt;&lt;th&gt;Message&lt;/th&gt;&lt;/tr&gt;";

    foreach ($array as $name => $message) {

        echo "&lt;tr&gt;&lt;td&gt;".htmlentities($name, ENT_QUOTES)."&lt;/td&gt;&lt;td&gt;".htmlentities($message)."&lt;/td&gt;&lt;/tr&gt;";

    }

    

    echo "&lt;/table&gt;";

?>

结果:

Name Message 

John John 

Mary Mary 

Peter Peter 

上面的用例中,我们将每个字符串的标签进行了转义,用表格显示了一个包含 HTML 代码的数组。

3.注意事项

- 应注意函数中所用的字符编码,不同的编码可能导致字符的转化不良序列化的问题。

- 如有必要,应在输出之前对编码进行处理。

- 转义所有用户传递的数据,避免 XSS 攻击等安全隐患。