|
|

楼主 |
发表于 2018-6-1 17:39:30
|
显示全部楼层
修改 \source\class\discuz\discuz_database.php
增加:
public static function utf8mb4($m = ''){
$m = preg_split('/(?<!^)(?!$)/u', $m);
foreach ($m as $k => $z) {
if(strlen($z)>3){
$z = unpack('H*', mb_convert_encoding($z,'UTF-32','UTF-8'));
$m[$k] = '&#x' . preg_replace('/^0*/','',$z[1]) . ';';
}
}
return implode('',$m);
}
public static function mb4utf8($m = ''){
if (is_string($m)){
preg_match_all('/&#x([a-fA-F0-9]{4,5});/',$m,$p);
foreach ($p[1] as $k => $h) {
$p[1][$k] = mb_convert_encoding( pack('H*', str_pad($h, 8, '0', STR_PAD_LEFT) ) ,'UTF-8','UTF-32');
}
return str_replace($p[0],$p[1],$m);
}elseif(is_array($m)){
foreach ($m as &$v) {
$v = self::mb4utf8($v);
}
}
return $m;
}
变更:
public static function fetch($resourceid, $type = MYSQL_ASSOC) {
- return self::$db->fetch_array($resourceid, $type);
+ return self::mb4utf8(self::$db->fetch_array($resourceid, $type));
}
public static function fetch_first($sql, $arg = array(), $silent = false) {
$res = self::query($sql, $arg, $silent, false);
- $ret = self::$db->fetch_array($res);
+ $ret = self::mb4utf8(self::$db->fetch_array($res));
self::$db->free_result($res);
return $ret ? $ret : array();
}
public static function fetch_all($sql, $arg = array(), $keyfield = '', $silent=false) {
$data = array();
$query = self::query($sql, $arg, $silent, false);
- while ($row = self::$db->fetch_array($query)) {
+ while ($row = self::mb4utf8(self::$db->fetch_array($query))) {
if ($keyfield && isset($row[$keyfield])) {
$data[$row[$keyfield]] = $row;
} else {
public static function result($resourceid, $row = 0) {
- return self::$db->result($resourceid, $row);
+ return self::mb4utf8(self::$db->result($resourceid, $row));
}
public static function quote($str, $noarray = false) {
if (is_string($str)){
+ $str = self::utf8mb4($str);
return '\'' . mysql_escape_string($str) . '\'';
}
修改了 \source\function\function_core.php 中的 function dhtmlspecialchars($string, $flags = null) 函数:
$string = preg_replace('/&((#(\d{3,6}|x[a-fA-F0-9]{4,5}));)/', '&\\1', $string);
|
|