亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

GD輸出漢字的函數的分析

2019-11-18 20:21:40
字體:
來源:轉載
供稿:網友
    很早以前找到一個把GB碼轉化為UTF-8的函數,配合一個GB到UNICODE的對照表(gb2312.txt),用于在GD中輸出漢字。后來發現在欲輸出的內容中含有西文字符時,會出現混亂。后來找到了修改后的代碼,解決了問題?,F將兩個函數做一對比分析如下。

首先,這是一個UNICODE到UTF-8編碼轉換的函數,這一部分修改前后沒有變化:
function u2utf8($c)
{
for($i=0;$i<count($c);$i++)
$str="";
if ($c < 0x80) {
$str.=$c;
}
else if ($c < 0x800) {
$str.=(0xC0 | $c>>6);
$str.=(0x80 | $c & 0x3F);
}
else if ($c < 0x10000) {
$str.=(0xE0 | $c>>12);
$str.=(0x80 | $c>>6 & 0x3F);
$str.=(0x80 | $c & 0x3F);
}
else if ($c < 0x200000) {
$str.=(0xF0 | $c>>18);
$str.=(0x80 | $c>>12 & 0x3F);
$str.=(0x80 | $c>>6 & 0x3F);
$str.=(0x80 | $c & 0x3F);
}
return $str;
}

這里完全是按照UTF-8編碼的規則,通過判斷字符屬于不同的UNICODE編碼段范圍,進行不同的移位和位與操作,以轉化為UTF-8編碼。關于該規則可參考http://www.utf8.org/上的說明。

這是修改前的GB轉化為UTF-8編碼的函數,其中調用了上面的u2utf8函數。
function gb2utf8($gb)     /* PRogram writen by sadly www.phpx.com  */
{
if(!trim($gb))
return $gb;
$filename="gb2312.txt";
$tmp=file($filename);
$codetable=array();
while(list($key,$value)=each($tmp))
$codetable[hexdec(substr($value,0,6))]=substr($value,7,6);
$utf8="";
while($gb)
{
if (ord(substr($gb,0,1))>127)
{
$this=substr($gb,0,2);
$gb=substr($gb,2,strlen($gb));
$utf8.=u2utf8(hexdec($codetable[hexdec(bin2hex($this))-0x8080]));
}
else
{
$gb=substr($gb,1,strlen($gb));
$utf8.=u2utf8(substr($gb,0,1));
}
}

$ret="";
for($i=0;$i<strlen($utf8);$i+=3)
$ret.=chr(substr($utf8,$i,3));

return $ret;
}
函數中while循環部分,把漢字逐個按照“對照表”轉化為UNICODE,再通過u2utf8函數轉化為UTF-8。但從中可以看出,while循環結束后,又用一個for循環,把每三個字節合成了一個UTF-8字符(見http://www.utf8.org/上的規則說明,每個漢字的UTF-8編碼為三字節),沒有考慮到其中的西文字符(西文字符的UTF-8編碼為一字節)。所以,如果欲輸出的內容中不論是開始時出現西文字符,或是漢字當中穿插西文字符,轉化為UTF-8后,都會被按照“每三個字節截取”的方式截開,導致亂碼。


以下是修改后的函數:
function gb2utf8($gb)    /* Program writen by sadly   modified by agun */
{
if(!trim($gb))
return $gb;
$filename="gb2312.txt";
$tmp=file($filename);
$codetable=array();
while(list($key,$value)=each($tmp))
$codetable[hexdec(substr($value,0,6))]=substr($value,7,6);

$ret="";
$utf8="";
while($gb)
{
if (ord(substr($gb,0,1))>127)
{
$this=substr($gb,0,2);
$gb=substr($gb,2,strlen($gb));
$utf8=u2utf8(hexdec($codetable[hexdec(bin2hex($this))-0x8080]));
for($i=0;$i<strlen($utf8);$i+=3)
$ret.=chr(substr($utf8,$i,3));
}
else
{
$ret.=substr($gb,0,1);
$gb=substr($gb,1,strlen($gb));
}
}
return $ret;
}

修改后的函數將 GB轉化為UNICODE、UNICODE轉化為UTF-8、幾個字節合成一個UTF-8字符,這三個步驟在一個循環里完成,尤其是幾個字節合成一個UTF-8字符這一步驟,放在判斷了字符屬于西文還是屬于漢字的條件分支里,據此決定截取一個字節還是三個字節。于是結果正確了!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美资源在线| 中文字幕日韩精品有码视频| 国产欧美一区二区三区在线看| 欧美成人一区二区三区电影| 日韩一区视频在线| 久久亚洲精品一区二区| 国产精品久久一| 日韩一区二区av| 久久久国产在线视频| 日韩电视剧在线观看免费网站| 色偷偷88888欧美精品久久久| 欧美高清视频一区二区| 亚洲综合在线做性| 日韩免费观看高清| 日韩欧美在线观看| 日本aⅴ大伊香蕉精品视频| 亚洲精品中文字幕有码专区| 亚洲第一黄色网| 中文字幕欧美亚洲| 疯狂蹂躏欧美一区二区精品| 国产精品美乳一区二区免费| 欧美激情视频网址| 国产精品第一区| 国产精品久久久精品| 国产精品一区二区三区成人| 精品少妇一区二区30p| 狠狠色狠狠色综合日日小说| 国产精品一区二区久久| 热re91久久精品国99热蜜臀| 久久69精品久久久久久国产越南| 91极品女神在线| 欧美激情一级欧美精品| 久久久精品免费| 亚洲国产精品久久久| 粉嫩老牛aⅴ一区二区三区| 另类少妇人与禽zozz0性伦| 国产精品香蕉av| 黑丝美女久久久| 亚洲三级免费看| 日本精品免费观看| 亚洲精品国产成人| 欧美极品美女电影一区| 一区二区亚洲精品国产| 国产精品久久久久久中文字| 成人xxxxx| 97碰碰碰免费色视频| 国产va免费精品高清在线观看| 欧美最顶级丰满的aⅴ艳星| 欧美华人在线视频| 亚洲色图综合久久| 国产人妖伪娘一区91| 日韩精品视频免费专区在线播放| 亚洲精品黄网在线观看| 中文字幕欧美亚洲| 高潮白浆女日韩av免费看| 欧美精品精品精品精品免费| 欧美另类精品xxxx孕妇| 日韩国产中文字幕| 亚洲精品日韩欧美| 在线日韩欧美视频| 国产亚洲一区二区精品| 国产丝袜一区二区| 国产精品欧美在线| 亚洲精选中文字幕| 国产一区二区色| 久久久久久18| 久久国产精品亚洲| 欧美日韩中文字幕在线视频| 亚洲曰本av电影| 久久久国产成人精品| 久久伊人精品一区二区三区| 欧美在线观看视频| 奇米4444一区二区三区| 日韩经典一区二区三区| 日韩电影免费在线观看| 久久精品国产亚洲精品2020| 色视频www在线播放国产成人| 国产精品久久久久久久久久东京| 欧美午夜精品久久久久久人妖| 久久99视频精品| 国产ts人妖一区二区三区| 国产精品视频地址| 亚洲欧美日韩中文在线制服| 久久久久久国产精品三级玉女聊斋| 日韩欧美在线视频日韩欧美在线视频| 欧美日韩中国免费专区在线看| 中国日韩欧美久久久久久久久| 91超碰caoporn97人人| 久久国产精品亚洲| 在线观看中文字幕亚洲| 色噜噜狠狠狠综合曰曰曰88av| 国产精品网站大全| 日韩极品精品视频免费观看| 91精品国产自产91精品| 欧美激情影音先锋| 91精品久久久久久久久久久久久久| 中文字幕不卡av| 久久99青青精品免费观看| 精品国产一区二区三区在线观看| 日韩一区在线视频| 成人444kkkk在线观看| 亚洲无限乱码一二三四麻| 亚洲电影第1页| 久久国产精品电影| 日韩国产精品一区| 热99精品只有里视频精品| 亚洲自拍偷拍第一页| 国产综合福利在线| 亚洲福利视频网| 羞羞色国产精品| 久久精品最新地址| 国产精品偷伦视频免费观看国产| 中文字幕日韩在线播放| 亚洲欧美中文日韩v在线观看| 精品久久久久久久大神国产| 欧美激情xxxx性bbbb| 欧美另类第一页| 色综合色综合久久综合频道88| 久久久999精品免费| 日韩二区三区在线| 96精品视频在线| 国产精品中文久久久久久久| 亚洲欧美三级伦理| 欧美又大又粗又长| 精品色蜜蜜精品视频在线观看| 亚洲最大在线视频| 亚洲欧美日韩中文在线制服| 欧美xxxx做受欧美| 九九九久久国产免费| 亚洲欧洲日产国码av系列天堂| 欧美一级电影久久| 成人av.网址在线网站| 久久99视频免费| 欧美日韩一区二区在线| 国产99视频在线观看| 日韩中文娱乐网| 一区二区成人精品| 欧美在线影院在线视频| 国产不卡在线观看| 日韩亚洲综合在线| 日韩国产精品亚洲а∨天堂免| 欧美激情久久久| 91高潮精品免费porn| 色综合伊人色综合网| 欧美激情视频网址| 国产一区二区三区视频在线观看| 国产亚洲激情视频在线| 青青草精品毛片| 亚洲欧美在线一区二区| 亚洲国产精品va在线观看黑人| 韩国欧美亚洲国产| 91精品在线影院| 国产精品极品尤物在线观看| 欧美亚洲成人免费| 成人在线一区二区| 精品久久香蕉国产线看观看gif| 日韩av在线高清| 久久精品视频免费播放| 亚洲激情免费观看| 日韩在线观看av| 日韩精品极品视频免费观看| 日韩中文第一页| 中文字幕精品久久| 国产性猛交xxxx免费看久久|