php指定编码类型,php 检测文件编码类型

在网上找了些关于PHP如何获取文件编码的例子。

大至如下

define ('UTF32_BIG_ENDIAN_BOM' , chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF));

define ('UTF32_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00));

define ('UTF16_BIG_ENDIAN_BOM' , chr(0xFE) . chr(0xFF));

define ('UTF16_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE));

define ('UTF8_BOM' , chr(0xEF) . chr(0xBB) . chr(0xBF));

function detect_utf_encoding($text) {

$first2 = substr($text, 0, 2);

$first3 = substr($text, 0, 3);

$first4 = substr($text, 0, 3);

if ($first3 == UTF8_BOM) return 'UTF-8';

elseif ($first4 == UTF32_BIG_ENDIAN_BOM) return 'UTF-32BE';

elseif ($first4 == UTF32_LITTLE_ENDIAN_BOM) return 'UTF-32LE';

elseif ($first2 == UTF16_BIG_ENDIAN_BOM) return 'UTF-16BE';

elseif ($first2 == UTF16_LITTLE_ENDIAN_BOM) return 'UTF-16LE';

}

function getFileEncoding($str){

$encoding=mb_detect_encoding($str);

if(empty($encoding)){

$encoding=detect_utf_encoding($str);

}

return $encoding;

}

$file = 'text1.txt';

echo getFileEncoding(file_get_contents($file)); // 输出ASCII

echo '';

$file = 'text2.txt';

echo getFileEncoding(file_get_contents($file)); // 输出UTF-8

echo '';

$file = 'text3.txt';

echo getFileEncoding(file_get_contents($file)); // 输出UTF-16LE

echo '';

但发现这个例子对于我的一些文件检测有问题。

附件中的例子就有问题。

以下为代码:

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

define ('UTF32_BIG_ENDIAN_BOM' , chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF));

define ('UTF32_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00));

define ('UTF16_BIG_ENDIAN_BOM' , chr(0xFE) . chr(0xFF));

define ('UTF16_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE));

define ('UTF8_BOM' , chr(0xEF) . chr(0xBB) . chr(0xBF));

function detect_utf_encoding($text) {

$first2 = substr($text, 0, 2);

$first3 = substr($text, 0, 3);

$first4 = substr($text, 0, 3);

if ($first3 == UTF8_BOM) return 'UTF-8';

elseif ($first4 == UTF32_BIG_ENDIAN_BOM) return 'UTF-32BE';

elseif ($first4 == UTF32_LITTLE_ENDIAN_BOM) return 'UTF-32LE';

elseif ($first2 == UTF16_BIG_ENDIAN_BOM) return 'UTF-16BE';

elseif ($first2 == UTF16_LITTLE_ENDIAN_BOM) return 'UTF-16LE';

}

function getFileEncoding($str){

$encoding=mb_detect_encoding($str);

if(empty($encoding)){

$encoding=detect_utf_encoding($str);

}

return $encoding;

}

$gbkFileContent = file_get_contents('txt/test_gbk.txt');

$utf8FileContent = file_get_contents('txt/test_utf-8.txt');

echo 'func----test_gbk_encoding:'.getFileEncoding($gbkFileContent).'
';

echo 'func----test_utf8_encoding:'.getFileEncoding($utf8FileContent).'
';

echo '
上面的好像检测不出来
试试下面的
';

echo 'mb_detect_encoding-----gbk:';

echo mb_detect_encoding($gbkFileContent, "gb2312, UTF-8").'
';

echo '
mb_detect_encoding-----utf8:';

echo mb_detect_encoding($utf8FileContent, "gb2312, UTF-8").'
';

echo iconv("UTF-8", "gb2312//IGNORE", $utf8FileContent);

?>

输出如下:

func----test_gbk_encoding:UTF-8

func----test_utf8_encoding:UTF-8

上面的好像检测不出来

试试下面的

mb_detect_encoding-----gbk:EUC-CN

mb_detect_encoding-----utf8:UTF-8

我是utf-8

直接利用mb_detect_encoding也是有一定问题,问题还是没有彻底解决。我这里的需求是把UTF-8的转换为其它类型,所以只要判断是UTF-8就处理,其它不处理就可以。但是如果其它编码有问题还是不能彻底解决问题。

发上来与大家讨论一下,也可能是TXT文件有问题?不标准?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值