用notepad++,可以查看php文件的編碼格式,是gbk還是utf8,一般php文件源碼里面都有寫編碼格式,沒寫的話就用我說的這個(gè)軟件打開,就能看到源碼的格式。
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供興業(yè)網(wǎng)站建設(shè)、興業(yè)做網(wǎng)站、興業(yè)網(wǎng)站設(shè)計(jì)、興業(yè)網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、興業(yè)企業(yè)網(wǎng)站模板建站服務(wù),10多年興業(yè)做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
編碼問題是解碼者決定的,數(shù)據(jù)本身并不指明編碼方式,而是讀數(shù)據(jù)的解碼者選擇自己的解碼方式
此處,php程序是數(shù)據(jù)本身,php解釋器是解碼者本身,
php解釋器對(duì)?php程序的編碼方式?并不應(yīng)人類對(duì)php程序的編碼方式理解不同而轉(zhuǎn)移
因此,理論上不存在獲取當(dāng)前數(shù)據(jù)編碼方式的?接口,只要當(dāng)時(shí)的編碼者(譬如人類)顯示指明編碼方式,
解碼者(譬如php解釋器)方可獲知
即使在解析以后再人類看來(lái)是一片亂碼,?PHP認(rèn)為一切都是正確的.
當(dāng)然從前端獲取來(lái)的字符例外
如果不清楚字符串的編碼格式的話,就可以將這段字符這樣檢查:
$encode?=?mb_detect_encoding($string,?array("ASCII",'UTF-8′,"GB2312′,"GBK",'BIG5′));?
echo?$encode;
這樣就能知道它是什么編碼的了。后續(xù)操作還可以為其轉(zhuǎn)碼:
if?($encode?==?“UTF-8″){
$string?=?iconv("UTF-8″,"GBK",$string);
}
$encode?=?mb_detect_encoding($string,?array("ASCII",'UTF-8′,"GB2312′,"GBK",'BIG5′));?
echo?$encode;
可以用以上代碼判斷字符串格式,轉(zhuǎn)碼的話,使用iconv函數(shù)
一般右擊查看源文件
meta http-equiv="Content-Type" content="text/html; charset=gb2312" /
頭部會(huì)有這樣的 charset=gb2312"這就是GB2312編碼 如果charset=utf-8"就是UTF-8編碼
如果沒有這句,在IE游覽器在頁(yè)面上可以選擇編碼,編碼前面會(huì)有個(gè)勾號(hào),如果沒有 你選擇下UTF-8編碼如果顯示亂碼 那就是GBK編碼 如果不亂碼 就是UTF-8編碼
文件a.txt,用PHP如何判斷它的編碼是GBK還是UTF-8呢?
1,重新認(rèn)識(shí)一下此問題,當(dāng)時(shí)版主回復(fù)的時(shí)候我就覺得mb函數(shù)里一定有這樣的功能,但今日研究了mb庫(kù),并沒有這樣的功能。用mb_detect_encoding總是不準(zhǔn)確。
echo mb_detect_encoding(file_get_contents('a.txt'));
2,我在PHP的在線文檔中找了一個(gè)方法,可以解決你的問題,需要自己編寫一個(gè)函數(shù)來(lái)實(shí)現(xiàn)。
具體代碼如下:
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;
}
}
$content = file_get_contents("a.txt");
echo isUTF8($content);
3,經(jīng)測(cè)試,在編碼種類不多的情況下,2方法成功率還是挺高的。
function ChickC($str)
{
$array = array('ASCII','GBK','UTF-8');
foreach ($array as $value)
{
if ($str === mb_convert_encoding(mb_convert_encoding($str, "UTF-32", $value), $value, "UTF-32"))
return $value;
}
return false;
}