发新话题
打印

使用 PHP 解析 javascript escape() 编码过的字串

使用 PHP 解析 javascript escape() 编码过的字串

PHP 跟 Javascript 都有 HTML encoding 的函式,编码过的结果虽然类似,但是还是有些微的不同,所以不能互转。

二者的差异可以可参考:
http://php.weblogs.com/php_jscript_vbscript_1

节录如下:

PHP:
urlencode( ) All punctuation, accented characters, and any other non-ASCII characters are replaced with %xx encoding. Spaces converted to +.

urldecode( )All punctuation, accented characters, and any other non-ASCII characters are replaced with %xx encoding. Spaces converted to +.

Javascript:
Javascript(str) All spaces, punctuation, accented characters, and any other non-ASCII characters are replaced with %xx encoding

那要如何用 PHP 来读取 escape() 编码过的字符串呢?

可以用以下的方式来读取 (范例为 Unicode 解译为 big5)

修改自:http://vivian.stripper.jp/index.php?itemid=100
复制内容到剪贴板
代码:
<?

$str 
uniDecode($str,'big-5');



 



function 
uniDecode($str,$charcode){



  
$text preg_replace_callback("/%u[0-9A-Za-z]{4}/",toUtf8,$str);



  return 
mb_convert_encoding($text$charcode'utf-8');



}



function 
toUtf8($ar){



  foreach(
$ar as $val){



    
$val intval(substr($val,2),16);



    if(
$val 0x7F){        // 0000-007F



        
$c .= chr($val);



    }elseif(
$val 0x800) { // 0080-0800



        
$c .= chr(0xC0 | ($val 64));



        
$c .= chr(0x80 | ($val 64));



    }else{                
// 0800-FFFF



        
$c .= chr(0xE0 | (($val 64) / 64));



        
$c .= chr(0x80 | (($val 64) % 64));



        
$c .= chr(0x80 | ($val 64));



    }



  }



  return 
$c;



}

?>

TOP

发新话题