關(guān)于js和php對(duì)url編碼的處理方法
解決辦法: 采用js對(duì)URL中的漢字進(jìn)行escape編碼。
<a href="" onclick="window.open('product_list.php?p_sort='+escape('PHP開(kāi)發(fā)資源網(wǎng)'));">
這樣點(diǎn)擊鏈接后的效時(shí):
引用:http://127.0.0.1/shop/product_list.php?p_sort=PHP%u5F00%u53D1%u8D44%u6E90%u7F51
生成了這樣的效果, 很明顯用PHP的urldecode()或者base64_decode()是無(wú)法反解的。
解決方法, 用PHP寫(xiě)一個(gè)反解函數(shù):
function js_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;
}
注意JS編碼會(huì)自動(dòng)轉(zhuǎn)換成為UTF-8, 所以必須進(jìn)行編碼轉(zhuǎn)換才能得到正確的結(jié)果,否則會(huì)中文亂碼。
print iconv('utf-8', 'gb2312', js_unescape($_REQUEST['p_sort']));
到此我們就成功地反解了js的escape編碼了。
另外我找到個(gè)用PHP實(shí)現(xiàn)js的escape編碼的函數(shù):
function phpescape($str){
$sublen=strlen($str);
$retrunString="";
for ($i=0;$i<$sublen;$i++){
if(ord($str[$i])>=127){
$tmpString=bin2hex(iconv("gb2312","ucs-2",substr($str,$i,2)));
//$tmpString=substr($tmpString,2,2).substr($tmpString,0,2);window下可能要打開(kāi)此項(xiàng)
$retrunString.="%u".$tmpString;
$i++;
} else {
$retrunString.="%".dechex(ord($str[$i]));
}}
return $retrunString;
}
相關(guān)文章
php制作unicode解碼工具(unicode編碼轉(zhuǎn)換器)代碼分享
php制作Unicode編碼解碼在線(xiàn)轉(zhuǎn)換工具代碼分享2013-12-12PHP 面向?qū)ο蟪绦蛟O(shè)計(jì)(oop)學(xué)習(xí)筆記(三) - 單例模式和工廠(chǎng)模式
設(shè)計(jì)模式是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過(guò)分類(lèi)編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。2014-06-06基于php實(shí)現(xiàn)隨機(jī)合并數(shù)組并排序(原排序)
最近做了一個(gè)項(xiàng)目,其中有這樣一個(gè)需求要實(shí)現(xiàn),原有帖子列表A,現(xiàn)在需要在A中推廣新業(yè)務(wù)B,那么需要在A列表中1:1混合B中的數(shù)據(jù),隨機(jī)混合,但是需要保持A和B兩列原來(lái)的數(shù)據(jù)排序,本篇文章給大家介紹基于php實(shí)現(xiàn)隨機(jī)合并數(shù)組并排序(原排序),需要的朋友參考下2015-11-11thinkPHP中_initialize方法實(shí)例分析
這篇文章主要介紹了thinkPHP中_initialize方法,結(jié)合實(shí)例形式分析了子類(lèi)調(diào)用父類(lèi)_initialize方法的原理與相關(guān)操作技巧,需要的朋友可以參考下2016-12-12laravel實(shí)現(xiàn)上傳圖片并在頁(yè)面顯示的例子
今天小編就為大家分享一篇laravel實(shí)現(xiàn)上傳圖片并在頁(yè)面顯示的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10Yii2漢字轉(zhuǎn)拼音類(lèi)的實(shí)例代碼
這篇文章主要介紹了Yii2漢字轉(zhuǎn)拼音類(lèi)的實(shí)例代碼,需要的朋友可以參考下2017-04-04destoon切換城市后實(shí)現(xiàn)logo旁邊顯示地區(qū)名稱(chēng)的方法
這篇文章主要介紹了destoon切換城市后實(shí)現(xiàn)logo旁邊顯示地區(qū)名稱(chēng)的方法,針對(duì)不同城市建設(shè)分站的時(shí)候很適用,需要的朋友可以參考下2014-08-08php安裝擴(kuò)展mysqli的實(shí)現(xiàn)步驟及報(bào)錯(cuò)解決辦法
這篇文章主要介紹了 php安裝擴(kuò)展mysqli的實(shí)現(xiàn)步驟及報(bào)錯(cuò)解決辦法的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下2017-09-09