- function dhtmlspecialchars($string) {
-
if(is_array($string)) {
-
foreach($string as $key => $val) {
-
$string[$key] = dhtmlspecialchars($val);
-
}
-
} else {
-
$string = str_replace(array('&', '"', '<', '>'), -
array('&', '"', '<', '>'), $string);
-
if(strpos($string, '&#') !== false) {
-
$string = preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4}));)/', -
'&\\1', $string);
-
}
-
}
-
return $string;
- }
这个函数是Discuz! X2核心函数库中一个函数,是一个递归的写法,可以处理数组中的代码,他们的作用是可以把一个数组或字符串中的字符转化为html实体,可以防止页面的跨站问题,那么我们看到他的转换就是将‘&’,‘”’,‘<’,‘>’转化为'&', '"', '<', '>'。但是这里面会有一些问题,如‘& #x5FD7;’这样的16进制的html字符,为了防止这样的字符被错误转译,所以又使用了正则进行匹配,把这样的字符又转换回来。
转自phpchina