php实现js的escape和unescape功能
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2017-02-09 09:59:15
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章
使用php实现的js中的escape和unescape编码功能
/** * 实现js的escape功能 * @param [type] $str [description] * @return [type] [description] */ function php_escape($str) { preg_match_all("/[\x80-\xff].|[\x01-\x7f]+/", $str, $newstr); $ar = $newstr[0]; foreach ($ar as $k => $v) { if (ord($ar[$k]) >= 127) { $tmpString = bin2hex(iconv("GBK", "ucs-2", $v)); if (!eregi("WIN", PHP_OS)) { $tmpString = substr($tmpString, 2, 2) . substr($tmpString, 0, 2); } $reString .= "%u" . $tmpString; } else { $reString .= rawurlencode($v); } } return $reString; } /** * 实现js的unescape功能 * @param [type] $str [description] * @return [type] [description] */ function php_unescape($str) { $str = rawurldecode($str); preg_match_all("/%u.{4}|&#x.{4};|&#d+;|.+/U", $str, $r); $ar = $r[0]; foreach ($ar as $k => $v) { if (substr($v, 0, 2) == "%u") { $ar[$k] = iconv("UCS-2", "GBK", pack("H4", substr($v, -4))); } elseif (substr($v, 0, 3) == "&#x") { $ar[$k] = iconv("UCS-2", "GBK", pack("H4", substr($v, 3, -1))); } elseif (substr($v, 0, 2) == "&#") { $ar[$k] = iconv("UCS-2", "GBK", pack("n", substr($v, 2, -1))); } } return join("", $ar); }
另外上面的编码函数使用过程中有时会出现乱码,解决不了的话就使用下面这个编码函数试一下
function escape($str) { preg_match_all("/[\xc2-\xdf][\x80-\xbf]+|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}|[\x01-\x7f]+/e", $str, $r); //匹配utf-8字符, $str = $r[0]; $l = count($str); for ($i = 0; $i < $l; $i++) { $value = ord($str[$i][0]); if ($value < 223) { $str[$i] = rawurlencode(utf8_decode($str[$i])); //先将utf8编码转换为ISO-8859-1编码的单字节字符,urlencode单字节字符. //utf8_decode()的作用相当于iconv("UTF-8","CP1252",$v)。 } else { $str[$i] = "%u" . strtoupper(bin2hex(iconv("UTF-8", "UCS-2", $str[$i]))); } } return join("", $str); }