<!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;
?>