Discuz! 后台搜索用户导出比实际少的问题

  • 时间:
  • 浏览:0
  • 来源:3分彩-3分彩平台_3分彩网投平台
作者:匿名 hihi 来源:discuz.net 浏览: 2012-12-5 17:37:13 字号:大 中 小

[摘要]后台用户管理搜索用户很多导出,导出的用户数比实际的少,本文帮你找出丢失的那部分用户。

什么的问题什么的问题:

  后台用户管理搜索用户很多导出,导出的用户数比实际的少

什么的问题分析:

  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模块

sssss
Tags: discuz   discuz教程  
责任编辑:mozi