📜  PHP中的 htmlentities() 与 htmlspecialchars()函数(1)

📅  最后修改于: 2023-12-03 14:45:28.035000             🧑  作者: Mango

PHP中的 htmlentities() 与 htmlspecialchars()函数

在PHP中,有两个主要的函数可以用于将HTML实体化和转义特殊字符:htmlentities()和htmlspecialchars()。

htmlentities()

htmlentities()函数将HTML特殊字符(如“<”和“>”)转换为等价的实体。例如,“<”会被转换为“<”,“>”会被转换为“>”。这个函数可以接受一个可选参数以指定字符编码。

语法如下:

string htmlentities ( string $string , int $flags = ENT_COMPAT | ENT_HTML401 , string $encoding = ini_get("default_charset") , bool $double_encode = true )

其中,参数说明如下:

  • $string:要转换的字符串;
  • $flags:可选参数,指定转换规则。它可以取以下值之一:
    • ENT_COMPAT - 仅编码双引号。默认。
    • ENT_QUOTES - 编码双引号和单引号。
    • ENT_NOQUOTES - 不编码任何引号。
    • ENT_HTML401 - 使用 HTML 4.01 实体名(将无法实现一些实体如&nEuro;)
    • ENT_XML1 - 使用 XML 1 实体名
    • ENT_XHTML - 使用 XHTML 实体名
    • ENT_HTML5 - 使用 HTML 5 实体名
  • $encoding:可选参数,指定字符串的字符编码。默认为系统的默认字符编码。
  • $double_encode:可选参数,指定是否对现有实体进行重新编码。默认为true。

例如,以下代码将字符串中的HTML特殊字符转换为实体:

$string = "<li>hello, world!</li>";
echo htmlentities($string);

输出结果:

&lt;li&gt;hello, world!&lt;/li&gt;
htmlspecialchars()

htmlspecialchars()函数将HTML特殊字符(如“<”和“>”)和一些特殊字符(如“&”和“'”)转义为等价的实体。例如,“<”会被转义为“<”,“&”会被转义为“&”。

语法如下:

string htmlspecialchars ( string $string , int $flags = ENT_COMPAT | ENT_HTML401 , string|null $encoding = null , bool $double_encode = true )

其中,参数说明如下:

  • $string:要转换的字符串;
  • $flags:可选参数,指定转换规则。它可以取以下值之一:
    • ENT_COMPAT - 仅编码双引号。默认。
    • ENT_QUOTES - 编码双引号和单引号。
    • ENT_NOQUOTES - 不编码任何引号。
    • ENT_HTML401 - 使用 HTML 4.01 实体名(将无法实现一些实体如&nEuro;)
    • ENT_XML1 - 使用 XML 1 实体名
    • ENT_XHTML - 使用 XHTML 实体名
    • ENT_HTML5 - 使用 HTML 5 实体名
  • $encoding:可选参数,指定字符串的字符编码。默认为系统的默认字符编码。
  • $double_encode:可选参数,指定是否对现有实体进行重新编码。默认为true。

例如,以下代码将字符串中的HTML特殊字符和特殊字符转义为实体:

$string = "<li>hello, & world!</li>";
echo htmlspecialchars($string);

输出结果:

&lt;li&gt;hello, &amp; world!&lt;/li&gt;

需要注意的是,如果使用htmlspecialchars()函数进行转义,鉴于这些字符串可能包含HTML元素,因此在将这些字符串插入HTML文档之前,请确保使用strip_tags()函数或其他方法删除HTML元素或脚本。这可以防止跨站点脚本(XSS)攻击。