$this->sourceString = iconv('utf-8//ignore', 'ucs-2', $source);
编码转换后,有部分丢失 ?本地可以,服务器上就有的给转换没了,这个是织梦CMS 的搜索分词 里 include/splitword.class.php   88行代码;在服务器上搜索分词部分词没有了!有谁遇到这个原因吗?

解决方案 »

  1.   

    utf-8的字符集比ucs-2大,所以转换后当然会少部分字符
      

  2.   

    这个调用有点怪, //ignore应该加在第二个参数后
      

  3.   


     function SetSource( $source, $source_charset='utf-8', $target_charset='utf-8' )
        {
            $this->sourceCharSet = strtolower($source_charset);
            $this->targetCharSet = strtolower($target_charset);
            $this->simpleResult = array();
            $this->finallyResult = array();
            $this->finallyIndex = array();
            if( $source != '' )
            {
                $rs = true;
                if( preg_match("/^utf/", $source_charset) ) {
                    $this->sourceString = iconv('utf-8//ignore', 'ucs-2', $source);
                    echo $this->sourceString;
                }
                else if( preg_match("/^gb/", $source_charset) ) {
                    $this->sourceString = iconv('utf-8', 'ucs-2', iconv('gb18030', 'utf-8//ignore', $source));
                }
                else if( preg_match("/^big/", $source_charset) ) {
                    $this->sourceString = iconv('utf-8', 'ucs-2', iconv('big5', 'utf-8', $source));
                }
                else {
                    $rs = false;
                }
            }
            else
            {
               $rs = false;
            }
            return $rs;
        }
      

  4.   

    他是将 内容先转换成ucs-2 编码 ,再分割,本地没有问题啊,为什么在服务器上就有问题了,分词结果少了?
      

  5.   

    是否用的linux 把编码改成 UCS-2LE 试下
      

  6.   

    这个到没注意,现在给出答案  $this->sourceString = iconv('utf-8//ignore', 'ucs-2BE', $source);代码全部改为'ucs-2BE'  因为Linux 默认是ucs-2BE  所有要指定为ucs-2BE