易客CRM,中小企业最忠实的合作伙伴!

类似javascript的unescape方法的php实现

787℃

一般情况下,当通过ajax把输入的值传给php时都要进行escape,php通过request获得传过来的值,保存的数据库中。这样的存取方法对英文等单字节语言是没有任何问题,但是对于双字节的中文简体,繁体,韩文和日文等就会出现问题,保存后显示为乱码。

经分析,php保存之前应该先对request传过来的值进行unescape,进行解码,这样才能正常保存中文等双字节。

因此要找一个与javascript的unescape类似的php方法,有人介绍urldocode和rawurldecode方法,但试了试都不行,最后找到一个和我遇到同样的问题的朋友的blog,他找到了一个解决方法,试了试,搞定。
他的blog:http://pure-essence.net/archives/2005/03/29/javascript-unescape-php-function/

具体方法在下面:
<?
function utf8RawUrlDecode ($source) {
    
$decodedStr = "";
    
$pos = 0;
    
$len = strlen ($source);
    while (
$pos < $len) {
        
$charAt = substr ($source, $pos, 1);
        if (
$charAt == '%') {
            
$pos++;
            
$charAt = substr ($source, $pos, 1);
            if (
$charAt == 'u') {
                
// we got a unicode character
                
$pos++;
                
$unicodeHexVal = substr ($source, $pos, 4);
                
$unicode = hexdec ($unicodeHexVal);
                
$entity = "&#". $unicode . ';';
                
$decodedStr .= utf8_encode ($entity);
                
$pos += 4;
            }
            else {
                
// we have an escaped ascii character
                
$hexVal = substr ($source, $pos, 2);
                
$decodedStr .= chr (hexdec ($hexVal));
                
$pos += 2;
            }
        } else {
            
$decodedStr .= $charAt;
            
$pos++;
        }
    }
    return
$decodedStr;
}
?>

转载请注明:易客CRM官方博客 » 类似javascript的unescape方法的php实现

喜欢 (0)or分享 (0)