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);
}