Discuz! 靠山搜索用户导出比实际少的问题

  靠山用户打点搜索用户然后导出,导出的用户数比实际的少

问题阐明:

  Discuz! 函数中的利用的是diconv函数举办的转换,通过调试发明转换为GBK编码的时候利用iconv函数举办转换时,字符被截取了。可是 $out = iconv($in_charset, $out_charset.'//IGNORE', $str); 是带有 ‘//IGNORE ’ 代表碰着转换不了的字符忽略,然而照旧被截取了。最后查资料发明是iconv的bug,将iconv从‘glibc’ 变动为 ‘libiconv ’ (从头编译iconv模块) 可能,利用 mb_convert_encoding来举办转换

办理要领:

  1、 Linux情况从头编译iconv, 从‘glibc’ 变动为 ‘libiconv ’ (详细编译请到网上搜索相关资料)

  2、利用mb_convert_encoding 取代 iconv

  打开:source/function/function_core.php

function diconv($str, $in_charset, $out_charset = CHARSET, $ForceTable = FALSE) {
global $_G;

$in_charset = strtoupper($in_charset);
$out_charset = strtoupper($out_charset);

if(empty($str) || $in_charset == $out_charset) {
return $str;
}

$out = '';

if(!$ForceTable) {
if(function_exists('iconv')) {
$out = iconv($in_charset, $out_charset.'//IGNORE', $str);
} elseif(function_exists('mb_convert_encoding')) {
$out = mb_convert_encoding($str, $out_charset, $in_charset);
}
}

if($out == '') {
$chinese = new Chinese($in_charset, $out_charset, true);
$out = $chinese->Convert($str);
}

return $out;
}

  变动为

function diconv($str, $in_charset, $out_charset = CHARSET, $ForceTable = FALSE) {
global $_G;

$in_charset = strtoupper($in_charset);
$out_charset = strtoupper($out_charset);

if(empty($str) || $in_charset == $out_charset) {
return $str;
}

$out = '';

if(!$ForceTable) {
if(function_exists('mb_convert_encoding')) {
$out = mb_convert_encoding($str, $out_charset, $in_charset);
}elseif(function_exists('iconv')) {
$out = iconv($in_charset, $out_charset.'//IGNORE', $str);
}
}

if($out == '') {
$chinese = new Chinese($in_charset, $out_charset, true);
$out = $chinese->Convert($str);
}

return $out;
}

  提示: 利用mb_convert_encoding 函数需要开启mbstring模块

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/9840.html