問題現象:
      後台用户管理搜索用户然後導出,導出的用户數比實際的少
問題分析:
     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

  1. function diconv($str, $in_charset, $out_charset = CHARSET, $ForceTable = FALSE) {
  2.         global $_G;
  3.         $in_charset = strtoupper($in_charset);
  4.         $out_charset = strtoupper($out_charset);
  5.         if(empty($str) || $in_charset == $out_charset) {
  6.                 return $str;
  7.         }
  8.         $out = '';
  9.         if(!$ForceTable) {
  10.                 if(function_exists('iconv')) {
  11.                         $out = iconv($in_charset, $out_charset.'//IGNORE', $str);
  12.                 } elseif(function_exists('mb_convert_encoding')) {
  13.                         $out = mb_convert_encoding($str, $out_charset, $in_charset);
  14.                 }
  15.         }
  16.         if($out == '') {
  17.                 $chinese = new Chinese($in_charset, $out_charset, true);
  18.                 $out = $chinese->Convert($str);
  19.         }
  20.         return $out;
  21. }

更改為:

  1. function diconv($str, $in_charset, $out_charset = CHARSET, $ForceTable = FALSE) {
  2.         global $_G;
  3.         $in_charset = strtoupper($in_charset);
  4.         $out_charset = strtoupper($out_charset);
  5.         if(empty($str) || $in_charset == $out_charset) {
  6.                 return $str;
  7.         }
  8.         $out = '';
  9.         if(!$ForceTable) {
  10.                 if(function_exists('mb_convert_encoding')) {
  11.                         $out = mb_convert_encoding($str, $out_charset, $in_charset);
  12.                 }elseif(function_exists('iconv')) {
  13.                         $out = iconv($in_charset, $out_charset.'//IGNORE', $str);
  14.                 }
  15.         }
  16.         if($out == '') {
  17.                 $chinese = new Chinese($in_charset, $out_charset, true);
  18.                 $out = $chinese->Convert($str);
  19.         }
  20.         return $out;
  21. }

提示: 使用 mb_convert_encoding 函數需要開啓 mbstring 模塊