千家信息网

htmlentities和htmlspecialchars 的区别有哪些

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章将为大家详细讲解有关htmlentities和htmlspecialchars 的区别有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。多人
千家信息网最后更新 2025年11月08日htmlentities和htmlspecialchars 的区别有哪些

这篇文章将为大家详细讲解有关htmlentities和htmlspecialchars 的区别有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

  多人都以为htmlentities跟htmlspecialchars的功能是一样的,都是格式化html代码的,我以前也曾这么认为,但是今天我发现并不是这样的。

  htmlentities和htmlspecialchars 的区别

  代码如下:

  '&' (ampersand) becomes '&'

  '"' (double quote) becomes '"' when ENT_NOQUOTES is not set.

  ''' (single quote) becomes ''' only when ENT_QUOTES is set.

  '<' (less than) becomes '<'   '>' (greater than) becomes '>'

  htmlspecialchars 只转化上面这几个html代码,而 htmlentities 却会转化所有的html代码,连同里面的它无法识别的中文字符也给转化了。

  我们可以拿一个简单的例子来做比较:

  代码如下:

  $str='测试页面';

  echo htmlentities($str);

  // ²âÊÔÒ³Ãæ

  $str='测试页面';

  echo htmlspecialchars($str);

  // 测试页面

  结论是,有中文的时候,最好用 htmlspecialchars ,否则可能乱码

  另外参考一下这个自定义函数

  代码如下:

  function my_excerpt( $html, $len ) {

  // $html 应包含一个 HTML 文档。

  // 本例将去掉 HTML 标记,javascript 代码

  // 和空白字符。还会将一些通用的

  // HTML 实体转换成相应的文本。

  $search = array ("']*?>.*?'si", // 去掉 javascript

  "'<[\/\!]*?[^<>]*?>'si", // 去掉 HTML 标记

  "'([\r\n])[\s]+'", // 去掉空白字符

  "'&(quot|#34);'i", // 替换 HTML 实体

  "'&(amp|#38);'i",

  "'&(lt|#60);'i",

  "'&(gt|#62);'i",

  "'&(nbsp|#160);'i",

  "'&(iexcl|#161);'i",

  "'&(cent|#162);'i",

  "'&(pound|#163);'i",

  "'&(copy|#169);'i",

  "'&#(\d+);'e"); // 作为 PHP 代码运行

  $replace = array ("",

  "",

  "\\1",

  "\"",

  "&",

  "<",   ">",

  " ",

  chr(161),

  chr(162),

  chr(163),

  chr(169),

  "chr(\\1)");

  $text = preg_replace ($search, $replace, $html);

  $text = trim($text);

  return mb_strlen($text) >= $len ? mb_substr($text, 0, $len) : '';

  }

  htmlspecialchar()函数和htmlentities()函数类似都是把html代码转换,htmlspecialchars_decode是把转化的html的编码转换成转换回来。

  我们可以拿一个简单的例子来做比较:

  代码如下:

  $str='测试';

  $transstr = htmlspecialchars($str) ;

  echo $transstr . "

  ";

  echo htmlspecialchars_decode($transstr)";

  运行上面的代码,就可以看出两者的差别了。

  一直都知道 PHP 中的 htmlentities 和 htmlspecialchars 函数都能把 html 中的特殊字符转换成对应的 character entity (不知道怎么翻译),也一直都知道 htmlentities 和 htmlspecialchars 函数有区别,但是一直都用不到这两个函数,也就没去研究过到底有什么区别。

  今天用到了,懒得看 PHP 手册里的鸟语,觉得这种问题应该会有人用中文写过,于是 Google 关键词"htmlentities htmlspecialchars",答案千篇一律。我已经司空见惯了,复制粘贴连小学生都会。经过对比发现,每篇文章大概都包含两部分:

  第一部分是引用 PHP 手册的说明:

  PHP 手册中对 htmlspecialchars 写道:

  The translations performed are:

  代码如下:

  '&' (ampersand) becomes '&'

  '"' (double quote) becomes '"' when ENT_NOQUOTES is not set.

  "' (single quote) becomes ''' only when ENT_QUOTES is set.

  '<' (less than) becomes '<'>' (greater than) becomes '>'

  这部分无可厚非,但是第二部分的解释却并不怎么正确:

  htmlspecialchars 只转化上面这几个html代码,而 htmlentities 却会转化所有的html代码,连同里面的它无法识别的中文字符也给转化了。

  我们可以拿一个简单的例子来做比较:

  代码如下:

  $str='测试页面';

  echo htmlentities($str);

  // ²âÊÔÒ³Ãæ

  $str='测试页面';

  echo htmlspecialchars($str);

  // 测试页面

  ?>

  结论是,有中文的时候,最好用 htmlspecialchars ,否则可能乱码。

  难道 htmlentities 函数只有一个参数吗?当然不是!htmlentities 还有三个可选参数,分别是 $quote_style、 $charset、 $double_encode,手册对 $charset 参数是这样描述的:

  Defines character set used in conversion. The default character set is ISO-8859-1.

  从上面程序输出的结果判断,$str 是 GB2312 编码的,"测试页面"几个字对应的十六进制值是:

  B2 E2 CA D4 D2 B3 C3 E6

  然而却被当成 ISO-8859-1 编码来解析:

  ²âÊÔÒ³Ãæ

  正好对应 HTML character entity 里的:

  ²âÊÔÒ³Ãæ

  当然会被 htmlentities 转义掉,但是只要加上正确的编码作为参数,根本就不会出现所谓的中文乱码问题:

  $str='测试页面';

  echo htmlentities($str, ENT_COMPAT, 'gb2312');

  // 测试页面三人成虎,以讹传讹。

  结论:htmlentities 和 htmlspecialchars 的区别在于 htmlentities 会转化所有的 html character entity,而htmlspecialchars 只会转化手册上列出的几个 html character entity (也就是会影响 html 解析的那几个基本字符)。一般来说,使用 htmlspecialchars 转化掉基本字符就已经足够了,没有必要使用 htmlentities。实在要使用 htmlentities 时,要注意为第三个参数传递正确的编码。

关于htmlentities和htmlspecialchars 的区别有哪些就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

代码 测试 页面 函数 字符 参数 手册 编码 中文 乱码 例子 篇文章 结论 三个 内容 实体 文章 时候 更多 最好 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 西藏人口管理系统软件开发 美团外卖的后台服务器 网站数据库md5 负责统筹协调网络安全的是 网络安全讲堂观后感300 剑侠情缘服务器双线和电信区别 靠谱的服务器搬迁费用 数据库中 如何对数据筛选 数据库文件打开的四种方式 珠海保姆平台软件开发 如何防范重大网络安全事件 水利信息化网络安全指导意见 软件开发_产品_项目 修改服务器超时时间 深圳网络安全中心误报道 免费的服务器版打卡软件 sql数据库入门基础知识 网络技术基础与计算机思维下载 移动集客网络技术支撑岗怎么样 计算机网络安全读博么 安全接入服务器地址 河北 贵州恒昊软件开发有限公司 局域网用的数据库 个人服务器需要安装dns吗 关系网络安全的素材 张家口网络技术预算 全国职业技能大赛网络安全管理员 versant数据库 网络技术对教师的影响 来个纸飞机服务器和端口
0