htmlspecialchars()

1. 定义

该函数与htmlentities()函数类似,它将部分特殊字符转换为 HTML 实体。 特殊字符有以下几种:

  • &:替换后&
  • ":替换后"
  • ':替换后'(ENT_HTML401)或'(ENT_XML1、 ENT_XHTML 或 ENT_HTML5)
  • <:替换后&lt;
  • >:替换后&gt;

2. 语法

htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = TRUE ]]] ) : string

3. 参数说明

参数 可选性 数据类型 描述
$string 必需 字符串 需要解码的字符串
$flags 可选 常量 设置该函数如何处理引号、无效代码序列和使用的文档类型,默认为ENT_COMPAT | ENT_HTML401
$encoding 可选 字符串 转换字符时使用的字符集编码,默认为php.ini文件中设置的编码集
$double_encode 可选 布尔值 是否转换现有的HTML实体,默认为TRUE

其中,$flags的值有以下几种:

  • ENT_COMPAT:只转换双引号,而不转换单引号
  • ENT_QUOTES:既转换单引号,也转换双引号
  • ENT_NOQUOTES:单/双引号都不转换
  • ENT_IGNORE:不建议使用该标记。该标记会直接丢弃无效的代码单元序列,而不是返回空字符串
  • ENT_SUBSTITUTE:替换无效的代码单元序列为Unicode代替符(Replacement Character),U+FFFD(UTF-8)或者&#xFFFD;(其他),而不是返回空字符串
  • ENT_DISALLOWED:为文档的无效代码点替换为Unicode代替符(Replacement Character):U+FFFD(UTF-8),或&#xFFFD;(其他),而不是把它们留在原处。 比如以下情况下就很有用:要保证XML文档嵌入额外内容时格式合法
  • ENT_HTML401:以HTML 4.01处理代码
  • ENT_XML1:以XML 1处理代码
  • ENT_XHTML:以XHTML处理代码
  • ENT_HTML5:以HTML 5处理代码

再有,$encoding支持的字符集有:ISO-8859-1ISO-8859-5ISO-8859-15UTF-8cp866cp1251cp1252KOI8-RBIG5GB2312BIG5-HKSCSShift_JISEUC-JPMacRoman等。

4. 示例

<?php

// htmlspecialchars()
// 将部分特殊字符转换为 HTML 实体

$str = '<h1>我们是极速教程</h1>"极速教程"是一个全新的教程网站,拥有简洁明了的说明和丰富的示例,受到广大编程入门者的喜爱!';
$res = htmlspecialchars($str);
var_dump($res);// 输出:string(186) "&lt;h1&gt;我们是极速教程&lt;/h1&gt;&quot;极速教程&quot;是一个全新的教程网站,拥有简洁明了的说明和丰富的示例,受到广大编程入门者的喜爱!"

$res = htmlspecialchars($str, ENT_QUOTES | ENT_DISALLOWED | ENT_HTML5);
var_dump($res);// 输出:string(186) "&lt;h1&gt;我们是极速教程&lt;/h1&gt;&quot;极速教程&quot;是一个全新的教程网站,拥有简洁明了的说明和丰富的示例,受到广大编程入门者的喜爱!"

5. 延展阅读