php实现js的escape和unescape功能

来源:赵克立博客 分类: PHP 标签:PHP发布时间:2017-02-03 23:15:11最后更新:2017-02-09 09:59:15浏览:2539
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。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);
}



微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python