PHP 获取文件 或 字符串的编码方式

  有时候从文本文档或者其它地方获取到字符串后由于编码的问题,输出的中文等文字会出现乱码,这时可以使用 mb_detect_encoding() 函数来判断字符串是什么编码的,然后用iconv函数转换成与页面一致的编码再输出字符串或者写入数据库。

注意:要把php.ini中 extension=php_mbstring.dll 前的;号去掉,重启apache就可以了。

代码如下: 

PHP代码
  1. <?php   
  2. define ('UTF32_BIG_ENDIAN_BOM'   , chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF));   
  3. define ('UTF32_LITTLE_ENDIAN_BOM'chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00));   
  4. define ('UTF16_BIG_ENDIAN_BOM'   , chr(0xFE) . chr(0xFF));   
  5. define ('UTF16_LITTLE_ENDIAN_BOM'chr(0xFF) . chr(0xFE));   
  6. define ('UTF8_BOM'               , chr(0xEF) . chr(0xBB) . chr(0xBF));   
  7.   
  8. function detect_utf_encoding($text) {   
  9.     $first2 = substr($text, 0, 2);   
  10.     $first3 = substr($text, 0, 3);   
  11.     $first4 = substr($text, 0, 3);   
  12.       
  13.     if ($first3 == UTF8_BOM) return 'UTF-8';   
  14.     elseif ($first4 == UTF32_BIG_ENDIAN_BOM) return 'UTF-32BE';   
  15.     elseif ($first4 == UTF32_LITTLE_ENDIAN_BOM) return 'UTF-32LE';   
  16.     elseif ($first2 == UTF16_BIG_ENDIAN_BOM) return 'UTF-16BE';   
  17.     elseif ($first2 == UTF16_LITTLE_ENDIAN_BOM) return 'UTF-16LE';   
  18. }   
  19. function getFileEncoding($str){   
  20.     $encoding=mb_detect_encoding($str);   
  21.     if(emptyempty($encoding)){   
  22.         $encoding=detect_utf_encoding($str);   
  23.     }   
  24.     return $encoding;   
  25. }   
  26. $file = 'text1.txt';   
  27. echo getFileEncoding(file_get_contents($file));  // 输出ASCII   
  28. echo '<br />';   
  29.   
  30. $file = 'text2.txt';   
  31. echo getFileEncoding(file_get_contents($file));  // 输出UTF-8   
  32. echo '<br />';   
  33. $file = 'text3.txt';   
  34. echo getFileEncoding(file_get_contents($file));  // 输出UTF-16LE   
  35. echo '<br />';   
  36. ?>   

其中三个文件:text1.txt 、text2.txt、text3.txt,分别以ASCII、UTF-8、UNICODE 的编码方式保存

发表评论

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