<?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  的环境下,服务器跟本地都运行测试了.
输出的确是乱码的。
同样是以"你好"作为输出错误乱码,或者是单独文件运行的时候显示请看源文件以及输出结果:
结合到其他文件里运行的时候,"你好"则出乱码为“ ɕ”并且编码为:&#x255;请问是哪里出错了?