找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2580|回复: 0

[分享] Discuz!开发之字符串处理函数dhtmlspecialchars介绍

[复制链接]
发表于 2017-11-15 11:46:15 | 显示全部楼层 |阅读模式 来自 中国–河南–新乡
dhtmlspecialchars定义于Discuz!核心函数库:\source\function\function_core.php,代码逻辑如下:
  1. function dhtmlspecialchars($string, $flags = null) {  
  2.     if(is_array($string)) {  
  3.         foreach($string as $key => $val) {  
  4.             $string[$key] = dhtmlspecialchars($val, $flags);  
  5.         }  
  6.     } else {  
  7.         if($flags === null) {  
  8.             $string = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string);  
  9.             if(strpos($string, '&#') !== false) {  
  10.                 $string = preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4}));)/', '&\\1', $string);  
  11.             }  
  12.         } else {  
  13.             if(PHP_VERSION < '5.4.0') {  
  14.                 $string = htmlspecialchars($string, $flags);  
  15.             } else {  
  16.                 if(strtolower(CHARSET) == 'utf-8') {  
  17.                     $charset = 'UTF-8';  
  18.                 } else {  
  19.                     $charset = 'ISO-8859-1';  
  20.                 }  
  21.                 $string = htmlspecialchars($string, $flags, $charset);  
  22.             }  
  23.         }  
  24.     }  
  25.     return $string;  
  26. }  
复制代码
dhtmlspecialchars实际上是对PHP内置函数htmlspecialchars的二次封装和补充,使得不仅可以处理字符串还可以递归处理数组;
它的作用是是可以把一个数组或字符串中的字符转化为html实体,可以防止页面的跨站问题,那么我们看到他的转换就是将‘&’,‘”’,‘<’,‘>’转化为'&amp;', '&quot;', '&lt;', '&gt;'。但是这里面会有一些问题,如‘& #x5FD7;’这样的16进制的html字符,为了防止这样的字符被错误转译,所以又使用了正则进行匹配,把这样的字符又转换回来;一般使用在内容输出到界面之前处理要输出的内容;

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-12-26 04:47 , Processed in 0.043428 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表