PHP判断字符串编码是否为utf-8的函数

欢迎加入PHP|dba|Js技术交流群:14364084一起讨论

上网时无意中找到这么一段PHP判断字符串编码是否为utf8的函数,这个应该会用到的,保存下来存个档,这个是据称完美的判断函数,希望是完美的!

 

  1. // Returns true if $string is valid UTF-8 and false otherwise.   
  2. function is_utf8($word)   
  3. {   
  4. if (preg_match("/^([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){1}/",$word) == true || preg_match("/([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){1}$/",$word) == true || preg_match("/([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){2,}/",$word) == true)   
  5. {   
  6. return true;   
  7. }   
  8. else   
  9. {   
  10. return false;   
  11. }   
  12. // function is_utf8   

旧版的函数,这个判断函数有点问题,对于某些GBK编码汉字也会误认为是UTF-8,如“要”、“营业”等。(建议不要再用了):

  1. // Returns true if $string is valid UTF-8 and false otherwise.  
  2. function is_utf8($string) {  
  3.  
  4. // From http://w3.org/International/questions/qa-forms-utf-8.html  
  5. return preg_match('%^(?:  
  6. [x09x0Ax0Dx20-x7E] # ASCII  
  7. | [xC2-xDF][x80-xBF] # non-overlong 2-byte  
  8. | xE0[xA0-xBF][x80-xBF] # excluding overlongs  
  9. | [xE1-xECxEExEF][x80-xBF]{2} # straight 3-byte  
  10. | xED[x80-x9F][x80-xBF] # excluding surrogates  
  11. | xF0[x90-xBF][x80-xBF]{2} # planes 1-3  
  12. | [xF1-xF3][x80-xBF]{3} # planes 4-15  
  13. | xF4[x80-x8F][x80-xBF]{2} # plane 16  
  14. )*$%xs', $string);  
  15.  
  16. // function is_utf8  

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*