php 如果知道一个汉字的ASC码,如何把它转换为汉字呢

如题所述

汉字可以被转换为unicode,示例:

<?php
/**
 * @Author: suifengtec
 * @Date:   2015-03-16 03:03:57
 * @Last Modified by:   suifengtec
 * @Last Modified time: 2015-03-16 03:12:24
 */
// utf8 - unicode  
function utf8_unicode($c) {  
   switch(strlen($c)) {  
     case 1:  
       return ord($c);  
     case 2:  
       $n = (ord($c[0]) & 0x3f) << 6;  
       $n += ord($c[1]) & 0x3f;  
       return $n;  
     case 3:  
       $n = (ord($c[0]) & 0x1f) << 12;  
       $n += (ord($c[1]) & 0x3f) << 6;  
       $n += ord($c[2]) & 0x3f;  
       return $n;  
     case 4:  
       $n = (ord($c[0]) & 0x0f) << 18;  
       $n += (ord($c[1]) & 0x3f) << 12;  
       $n += (ord($c[2]) & 0x3f) << 6;  
       $n += ord($c[3]) & 0x3f;  
       return $n;  
   }  
}  
  



// unicode - utf8  
function u2utf8($c) {    
    $str="";    
    if ($c < 0x80) $str.=$c;    
    else if ($c < 0x800) {    
        $str.=chr(0xC0 | $c>>6);    
        $str.=chr(0x80 | $c & 0x3F);    
    } else if ($c < 0x10000) {    
        $str.=chr(0xE0 | $c>>12);    
        $str.=chr(0x80 | $c>>6 & 0x3F);    
        $str.=chr(0x80 | $c & 0x3F);    
    } else if ($c < 0x200000) {    
        $str.=chr(0xF0 | $c>>18);    
        $str.=chr(0x80 | $c>>12 & 0x3F);    
        $str.=chr(0x80 | $c>>6 & 0x3F);    
        $str.=chr(0x80 | $c & 0x3F);    
    }  
    return $str;    
}  

//HTML输出为unicode,显示为汉字
function encode($c){  

    $len = strlen($c);  
    $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 = "&#$ud;";  
    }  
    return $scill;  


//TEST
$a=utf8_unicode('酷');   
echo u2utf8($a).u2utf8('威');    
echo encode('普'); // &#26222; 要:右键->查看源代码 可见

----------

浏览器显示:

右键->查看源代码:

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-07-24

汉字并不属于ASCII码范围

<?
$s = "汉字";

preg_match_all("/[\x80-\xff]?./",$s,$reg);

foreach($reg[0] as $ch) {
  $out[] = array_pop(unpack("S",$ch));
}

print_r($out);

foreach($out as $v)
  echo pack("S",$v);
?>

第2个回答  2015-03-13
汉字,没有ASC码,只有unicode码本回答被提问者采纳
第3个回答  2015-03-14
将一个ASCII码用String类型进行强制类型转换试试
第4个回答  2015-03-13
这不是你做的事

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网