如何将接收到的字符串自动转变为utf8编码?字符串本身是何种编码不确定,可能是中文也可能是日文或者俄文什么的,可以自动判断,然后转换为utf8

解决方案 »

  1.   

    <?php
    echo iconv("ISO-8859-1", "UTF-8", "This is a test.");
    ?> 
      

  2.   

    那就多写几句呗.把 gbk ,gb2312 俄文日文,什么的都转换成 utf8.
      

  3.   

    我资讯了一下我同事。一般来说,传东西对方默认都给你设置编码的。如果你非要按你那种说,我们就的对字符串进行判断。给你举个例子吧。
       1. //识别汉字编码,因为YBlog用的是utf-8,如果引用通告发过来的是gb2312的编码的话,需要可以识别并完成编码转换  
       2. function safeEncoding($string,$outEncoding = 'UTF-8')  
       3. {  
       4.     $encoding = "UTF-8";  
       5.     for($i=0;$i<strlen($string);$i++)  
       6.     {  
       7.         if(ord($string{$i})<128)  
       8.             continue;  
       9.  
      10.         if((ord($string{$i})&224)==224)  
      11.         {  
      12.             //第一个字节判断通过  
      13.             $char = $string{++$i};  
      14.             if((ord($char)&128)==128)  
      15.             {  
      16.                 //第二个字节判断通过  
      17.                 $char = $string{++$i};  
      18.                 if((ord($char)&128)==128)  
      19.                 {  
      20.                     $encoding = "UTF-8";  
      21.                     break;  
      22.                 }  
      23.             }  
      24.         }  
      25.         if((ord($string{$i})&192)==192)  
      26.         {  
      27.             //第一个字节判断通过  
      28.             $char = $string{++$i};  
      29.             if((ord($char)&128)==128)  
      30.             {  
      31.                 //第二个字节判断通过  
      32.                 $encoding = "GB2312";  
      33.                 break;  
      34.             }  
      35.         }  
      36.     }  
      37.       
      38.     if(strtoupper($encoding) == strtoupper($outEncoding))  
      39.         return $string;  
      40.     else 
      41.         return iconv($encoding,$outEncoding,$string);  
      42. } 
      

  4.   

    mb_convert_encoding 对多种编码进行自动识别!
      

  5.   

    mb_convert_encoding比iconv更强大。
      

  6.   


    同意。
    很多人以为一段字符串是有确定编码的,但是实际上,任何一段字符串,你可以把它理解成很多编码,
    编码不是由字符串本身决定,而只是确定其表达的意义。
    直接从字符串确定(猜测)其编码,几乎是不可能的。尤其其中还有可能有错误字符的情况。用mb_detect_encoding确定(猜测)编码,也是按照mb_detect_order中的编码次序逐个排除确认(或者你自己指定一系列编码)
      

  7.   

    mb_detect_encoding()可以判断字符串的编码类型,但是你得制定一个编码类型的数组,
    获取到类型后通过mb_convert_encoding()进行转码
      

  8.   

    我这有个代码:功能是实现汉字切割的!你参考下/**
    *utf-8字符串截取
    *$sourcestr源字符串
    *$cutlength截取长度
    *return 处理后的字符串
    */

    function cut_str($sourcestr,$cutlength) 

       $returnstr=''; 
       $i=0; 
       $n=0; 
       $str_length=strlen($sourcestr);//字符串的字节数 
       while (($n<$cutlength) and ($i<=$str_length)) 
       { 
          $temp_str=substr($sourcestr,$i,1); 
          $ascnum=Ord($temp_str);//得到字符串中第$i位字符的ascii码 
          if ($ascnum>=224)    //如果ASCII位高与224,
          { 
             $returnstr=$returnstr.substr($sourcestr,$i,3); //根据UTF-8编码规范,将3个连续的字符计为单个字符         
             $i=$i+3;            //实际Byte计为3
             $n++;            //字串长度计1
          }
          elseif ($ascnum>=192) //如果ASCII位高与192,
          { 
             $returnstr=$returnstr.substr($sourcestr,$i,2); //根据UTF-8编码规范,将2个连续的字符计为单个字符 
             $i=$i+2;            //实际Byte计为2
             $n++;            //字串长度计1
          }
          elseif ($ascnum>=65 && $ascnum<=90) //如果是大写字母,
          { 
             $returnstr=$returnstr.substr($sourcestr,$i,1); 
             $i=$i+1;            //实际的Byte数仍计1个
             $n++;            //但考虑整体美观,大写字母计成一个高位字符
          }
          else                //其他情况下,包括小写字母和半角标点符号,
          { 
             $returnstr=$returnstr.substr($sourcestr,$i,1); 
             $i=$i+1;            //实际的Byte数计1个
             $n=$n+0.5;        //小写字母和半角标点等与半个高位字符宽...
          } 
       } 
             if ($str_length>$cutlength){
              $returnstr = $returnstr . "...";//超过长度时在尾处加上省略号
          }
        return $returnstr;}
      

  9.   

    我日发错了! $string="ssssss";//输入的字符
    $encode_arr = array('ASCII','GB2312','GBK','UTF-8','BIG5');
    $encoded = mb_detect_encoding($string,$encode_arr);
    if($encoded != 'UTF-8') {
    $string = mb_convert_encoding( $string, "UTF-8", $encoded );
    }