所以除了尋找其他編碼方式,要不然就要自己寫一個解碼函數
但如果可以使用其他方式編碼會是比較好的
在 JavaScript 中還是有針對資料傳送用的編碼函數
例如:
decodeURL(str) 『解碼』
encodeURL(str) 『編碼』
decodeURLComponent(str) 『解碼』
encodeURLComponent(str) 『編碼』
以上的函數會將英文和數字以外的文字轉成 URL 的 16 進位編碼
而 decodeURL,encodeURL 不會轉換 [ ; / ? : @ & = + $ , ] 這些文字
但 decodeURLComponent,decodeURLComponent 則會
所以並非一定要用到 unescape 函式才可以處理編碼的問題
注意關於 PHP 中的 unescape 函式程式碼必須用到 iconv 函式庫
請確認 php.ini 中有載入此函式庫
<?php 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){ /* 下面的 UTF-8 可針對你的網頁編碼方式作變更 */ if(substr($v,0,2)=="%u"){ $ar[$k]=iconv("UCS-2","UTF-8",pack("H4",substr($v,-4)));} elseif(substr($v,0,3)=="&#x"){ $ar[$k]=iconv("UCS-2","UTF-8",pack("H4",substr($v,3,-1)));} elseif(substr($v,0,2)=="&#"){ $ar[$k]=iconv("UCS-2","UTF-8",pack("n",substr($v,2,-1)));} } return join("",$ar); } ?>
參考網頁:
PHP实现Javascript的escape(),unescape()的方法
PHP5網管實驗室
2 回應:
板大中文好像寫相反了,decode是解碼,encode才是編碼 :)
感謝糾正。
哈哈!我都忘記當時是怎麼寫的了,可能再暈吧!
張貼留言