Python论坛  - 讨论区

标题:cp936转码故障

2011年07月15日 星期五 10:31

我想问一个关于编码的事,我用mb_detect_encoding检测编码,表单提交的数据的编码竟然有好多种,有ASCII的,CP936,EUC-CN,我编辑器是utf-8的,我现在想把这些转换成utf-8的,但是cp936转不过来,使用的mb_convert_encoding方法,听同事说mb_detect_encoding在检测编码时有bug,不知道是不是这方面的原因,没有去看底层的实现,很急,期待回答!!!!

2011年07月15日 星期五 11:00

 

数据入口函数:在类mod_topic_ask.class.php中

/**

   * 入口处理数据函数

   */

  public static function datafilter(Array $data)

  {

 

    if(is_array($data) && ! empty($data))

    {

      foreach($data as $index => $item)

      {

        if(is_null($item) || $item == null || $item == '')

        {

          $item = "''";

          $data[$index] = $item;

        }

        if($item == 'yes' || $item == 'ok')

        {

          $item = 1;

          $data[$index] = $item;

        }

        if($item == 'no')

        {

          $item = 0;

          $data[$index] = $item;

        }

       if(is_numeric($item) && !ctype_digit($item))

        {

        throw new ex_applicationexception('输入的内容的数据类型不合法!请重新输入!');

        }

        if(is_numeric($item))

        {

          $oitem = intval($item);

          if($oitem != $item)

          {

            $data[$index] = $item;

          } else

          {                

            $data[$index] = $oitem;

          }

        }

        if(! is_numeric($item) && is_string($item))

        {

          $encodings = array("ASCII","CP936","GB2312","GBK","BIG5","EUC-CN");

          $encoding = mb_detect_encoding($item,array("ASCII","GB2312","GBK","BIG5","EUC-CN","CP936"));

 

          if(in_array($encoding, $encodings)){   

            mb_convert_encoding($item, 'utf-8',$encoding);

          }

          if($item == 'true')                                                                   

          {

            $item = 1;

          } else if($item == 'false')

          {

            $item = 0;

          }

          $data[$index] = $item;

        }

        if(is_bool($item))

        {

          $data[$index] == true ? 1 : 0;

        }

      }

    } else

    {

      throw new Exception('提问内容不能为空^_^!');

    }

    return $data;

  }

在类ask.inc.php中   调用方式:
     $this->data = $this->ask->datafilter($data);
           
      if($this->data['offertype'] == '健康币'){
   //不等,测试失败
}

原因编码不一样:

 $this->data['offertype'] 为cp936编码

 页面编码:utf-8

 但是这样:

        $this->data = $this->ask->datafilter($data);

           
      if(mb_convert_enccoding($this->data['offertype'],'UTF-8','CP936') == '健康币'){
   //相等,测试成功

 }      

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2023

    京ICP备05028076号