我正在研究将UFT-8文本编码为JSON格式时出现问题的项目
<?php
$result = array('wine'=>"测试", 'عربي'=>4, 'lemon'=>22);
echo json_encode($result);
我也尝试过Zend_JSON Library,
<?php
require_once 'Zend/Json.php';
$result = array('wine'=>"测试", 'عربي'=>4, 'lemon'=>22);
echo Zend_Json::encode($result);
在这两种情况下,JSON输出都很疯狂:
{"wine":"\u0639\u0631\u0628\u064a ","\u0639\u0631\u0628\u064a":4,"lemon":22}
我确实尝试过PHP5.2.6和PHP5.3,但结果相同..
如何将UTF-8文本转换为JSON?有什么建议吗?
答案 0 :(得分:2)
这是javascript / ecmascript理解的unicode符号。 尝试
<html>
<head>
<title>unicode test</title>
<script type="text/javascript">
function foo() {
var outDiv = document.getElementById("bar");
var jsondata = {"wine":"\u0639\u0631\u0628\u064a ","\u0639\u0631\u0628\u064a":4,"lemon":22};
for ( var k in jsondata ) {
outDiv.innerHTML += k + "=" + jsondata[k] + "<br />";
}
}
</script>
</head>
<body onload="foo()">
<div id="bar"></div>
</body>
</html>
亲眼看看。
http://www.ecmascript.org/docs/tc39-2009-043.pdf(第14页):
在字符串文字,正则表达式文字和标识符中,任何字符(代码单元)也可以表示为由六个字符组成的Unicode转义序列,即\ u加上四个十六进制数字。
答案 1 :(得分:1)
输出到底有多疯狂?
var b = {"wine":"\u0639\u0631\u0628\u064a ", test:"\u0639\u0631\u0628\u064a","lemon":22};
alert (b.wine);
该代码似乎成功显示عربي