2007-09-22 19:34

PHP 中的 unescape 函式

由於 PHP 中並沒有支援 JavaScript 的 escape() 的反函式
所以除了尋找其他編碼方式,要不然就要自己寫一個解碼函數
但如果可以使用其他方式編碼會是比較好的

在 JavaScript 中還是有針對資料傳送用的編碼函數
例如:
decodeURL(str) 『解碼』
encodeURL(str) 『編碼』
decodeURLComponent(str) 『解碼』
encodeURLComponent(str) 『編碼』
以上的函數會將英文和數字以外的文字轉成 URL 的 16 進位編碼
decodeURL,encodeURL 不會轉換 [ ; / ? : @ & = + $ , ] 這些文字
decodeURLComponent,decodeURLComponent 則會
所以並非一定要用到 unescape 函式才可以處理編碼的問題

注意關於 PHP 中的 unescape 函式程式碼必須用到 iconv 函式庫
請確認 php.ini 中有載入此函式庫
  1. <?php 
  2. function unescape($str){ 
  3.    $str = rawurldecode($str); 
  4.    preg_match_all("/%u.{4}|&#x.{4};|&#\d+;|.+/U",$str,$r); 
  5.    $ar = $r[0]; 
  6.  
  7.    foreach($ar as $k=>$v){ 
  8.        /* 下面的 UTF-8 可針對你的網頁編碼方式作變更 */ 
  9.        if(substr($v,0,2)=="%u"){ 
  10.            $ar[$k]=iconv("UCS-2","UTF-8",pack("H4",substr($v,-4)));} 
  11.        elseif(substr($v,0,3)=="&#x"){ 
  12.            $ar[$k]=iconv("UCS-2","UTF-8",pack("H4",substr($v,3,-1)));} 
  13.        elseif(substr($v,0,2)=="&#"){ 
  14.            $ar[$k]=iconv("UCS-2","UTF-8",pack("n",substr($v,2,-1)));} 
  15.    } 
  16.    return join("",$ar); 
  17. } 
  18. ?> 

參考網頁:
PHP实现Javascript的escape(),unescape()的方法
PHP5網管實驗室

2 回應:

Unknown 提到...

板大中文好像寫相反了,decode是解碼,encode才是編碼 :)

Jax Hu 提到...

感謝糾正。
哈哈!我都忘記當時是怎麼寫的了,可能再暈吧!