Я работал над проектом, который имел проблемы при кодировании текста 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? Какие-либо предложения?
Это уникода, обозначаемая javascript / ecmascript. Пытаться
<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):
В строковых литералах, литералах регулярных выражений и идентификаторах любой символ (блок кода) также может быть выражен как escape-последовательность Unicode, состоящая из шести символов, а именно: \ u плюс четыре шестнадцатеричных цифры.
Что именно безумие в отношении выхода?
var b = {"wine":"\u0639\u0631\u0628\u064a ", test:"\u0639\u0631\u0628\u064a","lemon":22}; alert (b.wine);
Этот код, кажется, успешно показывает عربي