亂碼編碼php測試
function encode($c)
{
$len = strlen($c);
$scill='';
$jieguo='';
$a = 0;
while ($a < $len)
{
$ud = 0;
if (ord($c{$a}) >=0 && ord($c{$a})<=127)
{
$ud = ord($c{$a});
$a += 1;
}
else if (ord($c{$a}) >=192 && ord($c{$a})<=223)
{
$ud = (ord($c{$a})-192)*64 + (ord($c{$a+1})-128);
$a += 2;
}
else if (ord($c{$a}) >=224 && ord($c{$a})<=239)
{
$ud = (ord($c{$a})-224)*4096 + (ord($c{$a+1})-128)*64 + (ord($c{$a+2})-128);
$a += 3;
}
else if (ord($c{$a}) >=240 && ord($c{$a})<=247)
{
$ud = (ord($c{$a})-240)*262144 + (ord($c{$a+1})-128)*4096 + (ord($c{$a+2})-128)*64 + (ord($c{$a+3})-128);
$a += 4;
}
else if (ord($c{$a}) >=248 && ord($c{$a})<=251)
{
$ud = (ord($c{$a})-248)*16777216 + (ord($c{$a+1})-128)*262144 + (ord($c{$a+2})-128)*4096 + (ord($c{$a+3})-128)*64 + (ord($c{$a+4})-128);
$a += 5;
}
else if (ord($c{$a}) >=252 && ord($c{$a})<=253)
{
$ud = (ord($c{$a})-252)*1073741824 + (ord($c{$a+1})-128)*16777216 + (ord($c{$a+2})-128)*262144 + (ord($c{$a+3})-128)*4096 + (ord($c{$a+4})-128)*64 + (ord($c{$a+5})-128);
$a += 6;
}
else if (ord($c{$a}) >=254 && ord($c{$a})<=255)
{ //error
$ud = false;
}
$scill = dechex($ud); // 再把結果十進位轉換為十六進位
$jieguo .= "&#x".$scill.";";} return $jieguo;
}
echo encode('你好');
?>
一段中文漢字轉換到ASCII,再轉換到十進位,並且首碼添加"&#x" 尾碼添加";" 的代碼.
我在一些線上PHP測試網站裡測試輸出是正常的.
如在這裡測試:
http://www.mcqyy.com/RunCode/php/
是正常的輸出的
輸出的結果是編碼的模式,但是在html裡是可以顯示出中文的,如下動圖:
但是我再架設到php5.2 IIS7 的環境下,伺服器跟本地都運行測試了.
輸出的確是亂碼的。
同樣是以"你好"作為輸出錯誤亂碼,或者是單獨檔案啟動並執行時候顯示
請看源檔案以及輸出結果:
結合到其他檔案裡啟動並執行時候,"你好"則出亂碼為“ ɕ”並且編碼為:ɕ
請問是哪裡出錯了?