|生命中医网|网站总纲|网上教室|生命中医论坛| 会员聊天室| 中医术数源流图|多年五运六气推算|网站使用及简介|
分类:杂汇文章
字号:
修改
判断文件或者一段字符串是什么编码的函数).txt

网上

有没有直接判断文件或者一段字符串是什么编码的函数呢?

测试:将 text1.txt 保存成 ASCII编码, text2.txt 保存成 UTF-8 编码

<?php
function chkCode($string){
$code = array('ASCII', 'GBK', 'UTF-8');
foreach($code as $c){
if( $string === iconv('UTF-8', $c, iconv($c, 'UTF-8', $string))){
return $c;
}
}
return null;
}

$file = 'text1.txt';
echo chkCode(file_get_contents($file)); // 输出ASCII
echo '<br />';

$file = 'text2.txt';
echo chkCode(file_get_contents($file)); // 输出UTF-8
echo '<br />';
?>




今天在PHPCHINA的论坛上看到有人问如何在PHP程序中判断一个文本文件的编码格式,有些人说使用mb_detect_encoding函数来判断,但是经过楼主的测试无论文档采用什么编码格式,都只是显示UTF-8。我在PHP在线文档中查看到这个方法可以检测

function isUTF8($str)
{
if ($str === mb_convert_encoding(mb_convert_encoding($str, "UTF-32", "UTF-8"), "UTF-8", "UTF-32"))
{
return true;
}
else
{
return false;
}
}
这个方法里面并没有使用mb_detect_encoding方法,而是使用mb_convert_encoding方法将原来的字符串转换后进行判断得出结果。我测试过该方法可以用来判断字符串是否采用UTF8的编码!

2
顶一下







比如得到一个字符串,在PHP中我如何判断它是GB2312还是utf-8编码
已有 121 次阅读 2009-11-27 12:17 标签: 字符 PHP 编码 判断
网上搜索到了一个数据, 感觉挺好的, 想法很好

function getSafeCode($value)
{
$value_1= $value;
$value_2 = @iconv("utf-8","gb2312",$value_1);
$value_3 = @iconv("gb2312","utf-8",$value_2);

if (strlen($value_1) == strlen($value_3))
{
return $value_2;
}else
{
return $value_1;
}
}

这个函数返回了gb2312的数据





整理一下昨天問大家關於PHP如何判斷是否為utf8編碼文件的方法,以下資料是用
google搜尋到的。
位置: http://ibtaiwan.com/ipb/index.php?showtopic=4035
由於utf8編碼有固定格式,其可能有2~4個字節,我們可以將每一個字節拆開判斷
這個函示僅判斷每個中文字的第一個字節,應該夠了。
請大家看看有沒有問題!

//判斷字串是否為utf8
function is_utf8($str) {
$i=0;
$len = strlen($str);

for($i=0;$i<$len;$i++) {
$sbit = ord(substr($str,$i,1));
if($sbit < 128) {
//本字節為英文字符,不與理會
}elseif($sbit > 191 && $sbit < 224) {
//第一字節為落於192~223的utf8的中文字(表示該中文為由2個字節所組成utf8中文字),找下一個中文字
$i++;
}elseif($sbit > 223 && $sbit < 240) {
//第一字節為落於223~239的utf8的中文字(表示該中文為由3個字節所組成的utf8中文字),找下一個中文字
$i+=2;
}elseif($sbit > 239 && $sbit < 248) {
//第一字節為落於240~247的utf8的中文字(表示該中文為由4個字節所組成的utf8中文字),找下一個中文字
$i+=3;
}else{
//第一字節為非的utf8的中文字
return 0;
}
}
//檢查完整個字串都沒問體,代表這個字串是utf8中文字
return 1;
}

以下为最近的前十五条评论:
共0条信息
暂时没有信息

----评论处 ----
发评者:请回答:27 十 56 =