js unicode 编码解码

<!DOCTYPE html>

<html>
	<head>
		<meta charset='utf-8'>
		<title>测试</title>
	</head>
	<body>
		<script>
			(function(){

				// str 转 unicode
				function str2uni(str){
					var result = [];
					var len = str.length;
					for(var i=0; i<len; i++){
						//由于 需要转义 所以存储 两个 \
						result.push('\\\\u');
						//保留4位
						result.push(('0000' + str.charCodeAt(i).toString(16)).slice(-4));//10 转 16
					}
					return result.join('');
				};

				// unicode 转 str
				function uni2str(str){
					var result = [];
					var strArr = str.split('\\u');//根据 \u 分割
					var len = strArr.length;
					for(var i=0; i<len; i++){
						if(strArr[i]){
							result.push(String.fromCharCode(parseInt(strArr[i], 16)));//16 转 10
						}
					}
					return result.join('');
				};

				window.onload = function(){
					document.write(
						  str2uni('严 好 unicode 转换:"|<>?')
						+ '<br/><br/><br/>'
						+ uni2str('\\u4e25\\u0020\\u597d\\u0020\\u0075\\u006e\\u0069\\u0063\\u006f\\u0064\\u0065\\u0020\\u8f6c\\u6362\\u003a\\u0022\\u007c\\u003c\\u003e\\u003f')
					);//注意js 斜杠 需要转义
				};

			})();
		</script>
	</body>
</html>






对应的 php 编码解码


<?php
	
	//确保本文件保存的是 utf-8 否则会乱码
	//记事本打开 --> 另存为 --> 编码选择 UTF-8

	//http://www.phpjiayuan.com/90/225.html
	//php 实现 js charCodeAt
	function charCodeAt($str, $index){
		$char = mb_substr($str, $index, 1, 'UTF-8');
		if (mb_check_encoding($char, 'UTF-8')){
			$ret = mb_convert_encoding($char, 'UTF-32BE', 'UTF-8');
			return bin2hex($ret);//2 转 16
		}
	}

	function str_to_unicode($str){
		$result = '';
		$len = mb_strlen($str);
		for($i=0; $i<$len; $i++){
			$band16 = charCodeAt($str, $i);
			if($band16){
				$result .= '\\u';
				$result .= substr('0000'.charCodeAt($str, $i), -4, 4);//保留4位
			}
		}
		return $result;
	}

	//http://stackoverflow.com/questions/2934563/how-to-decode-unicode-escape-sequences-like-u00ed-to-proper-utf-8-encoded-cha
	function unicode_to_str($str){
		return preg_replace_callback('/\\\\u([0-9a-f]{4})/i', function($match){
			return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');
		}, $str);
	}

	//疑问: 单斜杠 双斜杠 效果一样

	// 解码测试
	$str = '\u4e25\u0020\u597d\u0020\u0075\u006e\u0069\u0063\u006f\u0064\u0065\u0020\u8f6c\u6362\u003a\u0022\u007c\u003c\u003e\u003f';
	echo '<br/><br/><br/>';
	echo $str;
	echo '<br/>';
	echo unicode_to_str($str);

	$str = '\\u4e25\\u0020\\u597d\\u0020\\u0075\\u006e\\u0069\\u0063\\u006f\\u0064\\u0065\\u0020\\u8f6c\\u6362\\u003a\\u0022\\u007c\\u003c\\u003e\\u003f';
	echo '<br/><br/><br/>';
	echo $str;
	echo '<br/>';
	echo unicode_to_str($str);

	// 编码测试
	$str = '严 好 unicode 转换:"|<>?';
	echo '<br/><br/><br/>';
	echo str_to_unicode($str);
	echo '<br/>';
	echo $str;
?>




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值