2009-10-21 19 views
1

我被編碼UFT-8文本轉換成JSON格式如何UTF-8文本轉換成JSON格式

<?php 
$result = array('wine'=>"測試", 'عربي'=>4, 'lemon'=>22); 
echo json_encode($result); 

,我也嘗試過Zend_JSON庫當項目有問題的工作,

<?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?有什麼建議麼?

+2

這是有效的JSON。請參閱http://json.org/上的語法 – Gumbo 2009-10-21 19:06:02

回答

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加四十六進制數字。
+0

謝謝VolkerK,你解釋得非常好! – tawfekov 2009-10-21 19:33:26

1

究竟是什麼瘋狂的輸出?

var b = {"wine":"\u0639\u0631\u0628\u064a ", test:"\u0639\u0631\u0628\u064a","lemon":22}; 
alert (b.wine); 

該代碼似乎已成功展示عربي

+0

我不知道javascript/ecmascript所理解的unicode符號是這樣的,因爲我通常用英文工作,所以我只是在期待相同的字符串。謝謝! – tawfekov 2009-10-21 19:35:00