高手superior

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
/**
* 功能和js unescape函数,解码经过escape编码过的数据
* @param $str
*/ 
function 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 escape php 实现
* @param $string           the sting want to be escaped
* @param $in_encoding      
* @param $out_encoding     
*/ 
function escape($string, $in_encoding = 'UTF-8',$out_encoding = 'UCS-2') { 
    $return = '';
    if (function_exists('mb_get_info')) { 
        for($x = 0; $x < mb_strlen ( $string, $in_encoding ); $x ++) { 
            $str = mb_substr ( $string, $x, 1, $in_encoding );
            if (strlen ( $str ) > 1) { // 多字节字符
                $return .= '%u' . strtoupper ( bin2hex ( mb_convert_encoding ( $str, $out_encoding, $in_encoding ) ) );
            } else { 
                $return .= '%' . strtoupper ( bin2hex ( $str ) );
            } 
        } 
    } 
    return $return;
}

经测试这段代码能正常显示中文。

posted on 2015-03-19 11:11  高手superior  阅读(3087)  评论(0编辑  收藏  举报