PHP下escape解碼函數(shù)的實(shí)現(xiàn)方法
更新時(shí)間:2010年08月08日 11:45:56 作者:
很多時(shí)候需要用到j(luò)s的escape函數(shù)來轉(zhuǎn)換中文字符,可是用js轉(zhuǎn)換后的字符怎么用php來轉(zhuǎn)換回來呢,下面我就找到了兩個(gè)很實(shí)用的函數(shù)。
GB2312編碼:
function unescape($str) {
$str = rawurldecode($str);
preg_match_all("/%u.{4}|&#x.{4};|&#d+;|.+/U",$str,$r);
$ar = $r[0];
foreach($ar as $k=>$v) {
if(substr($v,0,2) == "%u")
$ar[$k] = iconv("UCS-2","GBK",pack("H4",substr($v,-4)));
elseif(substr($v,0,3) == "&#x")
$ar[$k] = iconv("UCS-2","GBK",pack("H4",substr($v,3,-1)));
elseif(substr($v,0,2) == "&#") {
$ar[$k] = iconv("UCS-2","GBK",pack("n",substr($v,2,-1)));
}
}
return join("",$ar);
}
UTF8編碼:
function unescape($str){
$ret = '';
$len = strlen($str);
for ($i = 0; $i < $len; $i++){
if ($str[$i] == '%' && $str[$i+1] == 'u'){
$val = hexdec(substr($str, $i+2, 4));
if ($val < 0x7f) $ret .= chr($val);
else if($val < 0x800) $ret .= chr(0xc0|($val>>6)).chr(0x80|($val&0x3f));
else $ret .= chr(0xe0|($val>>12)).chr(0x80|(($val>>6)&0x3f)).chr(0x80|($val&0x3f));
$i += 5;
}
else if ($str[$i] == '%'){
$ret .= urldecode(substr($str, $i, 3));
$i += 2;
}
else $ret .= $str[$i];
}
return $ret;
}
復(fù)制代碼 代碼如下:
function unescape($str) {
$str = rawurldecode($str);
preg_match_all("/%u.{4}|&#x.{4};|&#d+;|.+/U",$str,$r);
$ar = $r[0];
foreach($ar as $k=>$v) {
if(substr($v,0,2) == "%u")
$ar[$k] = iconv("UCS-2","GBK",pack("H4",substr($v,-4)));
elseif(substr($v,0,3) == "&#x")
$ar[$k] = iconv("UCS-2","GBK",pack("H4",substr($v,3,-1)));
elseif(substr($v,0,2) == "&#") {
$ar[$k] = iconv("UCS-2","GBK",pack("n",substr($v,2,-1)));
}
}
return join("",$ar);
}
UTF8編碼:
復(fù)制代碼 代碼如下:
function unescape($str){
$ret = '';
$len = strlen($str);
for ($i = 0; $i < $len; $i++){
if ($str[$i] == '%' && $str[$i+1] == 'u'){
$val = hexdec(substr($str, $i+2, 4));
if ($val < 0x7f) $ret .= chr($val);
else if($val < 0x800) $ret .= chr(0xc0|($val>>6)).chr(0x80|($val&0x3f));
else $ret .= chr(0xe0|($val>>12)).chr(0x80|(($val>>6)&0x3f)).chr(0x80|($val&0x3f));
$i += 5;
}
else if ($str[$i] == '%'){
$ret .= urldecode(substr($str, $i, 3));
$i += 2;
}
else $ret .= $str[$i];
}
return $ret;
}
您可能感興趣的文章:
- PHP中strnatcmp()函數(shù)“自然排序算法”進(jìn)行字符串比較用法分析(對比strcmp函數(shù))
- PHP 冒泡排序 二分查找 順序查找 二維數(shù)組排序算法函數(shù)的詳解
- 通過PHP的內(nèi)置函數(shù),通過DES算法對數(shù)據(jù)加密和解密
- php不用內(nèi)置函數(shù)對數(shù)組排序的兩個(gè)算法代碼
- PHP實(shí)現(xiàn)手機(jī)號碼中間四位用星號(*)隱藏的自定義函數(shù)分享
- PHP圖片處理之使用imagecopyresampled函數(shù)實(shí)現(xiàn)圖片縮放例子
- PHP實(shí)現(xiàn)通用alert函數(shù)的方法
- PHP實(shí)現(xiàn)數(shù)字補(bǔ)零功能的2個(gè)函數(shù)介紹
- PHP實(shí)現(xiàn)生成透明背景的PNG縮略圖函數(shù)分享
- php實(shí)現(xiàn)的簡單日志寫入函數(shù)
- PHP簡單實(shí)現(xiàn)歐拉函數(shù)Euler功能示例
相關(guān)文章
PHP轉(zhuǎn)盤抽獎(jiǎng)接口實(shí)例
這篇文章主要介紹了PHP轉(zhuǎn)盤抽獎(jiǎng)接口的實(shí)現(xiàn)方法,實(shí)例分析了隨機(jī)抽獎(jiǎng)接口的實(shí)現(xiàn)原理與對應(yīng)數(shù)據(jù)庫操作的技巧,需要的朋友可以參考下2015-02-02PHP基于curl后臺遠(yuǎn)程登錄正方教務(wù)系統(tǒng)的方法
這篇文章主要介紹了PHP基于curl后臺遠(yuǎn)程登錄正方教務(wù)系統(tǒng)的方法,結(jié)合實(shí)例形式分析了php使用curl及cookie實(shí)現(xiàn)遠(yuǎn)程登陸的操作技巧,需要的朋友可以參考下2016-10-10PHP實(shí)現(xiàn)逐行刪除文件右側(cè)空格的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)逐行刪除文件右側(cè)空格的方法,涉及php針對文件的打開、逐行讀取、rtrim函數(shù)刪除右側(cè)空格及文件保存等技巧,需要的朋友可以參考下2015-12-12php讀取txt文件并將數(shù)據(jù)插入到數(shù)據(jù)庫
這篇文章主要介紹了php讀取txt文件并將數(shù)據(jù)插入到數(shù)據(jù)庫的方法和示例代碼,小文件大家可以參考第一種,大文件導(dǎo)入的話請參考第二種。2016-02-02