2013-05-18 41 views
0

在json_encode看起來像這樣一個字符串在希伯來語: [{「id」:「1」,「value」:「\ u05d1 \ u05dc \ u05d0 \ u05d2 \ u05df」} 任何想法這是什麼編碼,我如何得到這個工作或再次可讀? 順便說一下,這是一個運行在PHP 5.3上的Joomla系統,字符串來自post請求,而不是數據庫,並且存在UTF-8元標記。JSON編碼在PHP5.3 unicode問題

+0

這看起來像unicode。 – elclanrs

+0

也許你可以使用base64來編碼你的字符串,並在需要時解碼 – SmasherHell

+0

這是正常的,你可以使用它,你會得到正常的數據 – user2368299

回答

0

這就是JSON如何編碼非ASCII字符。當您通過JSON解析器傳遞文本時,文本將再次可讀。

PHP 5.4爲json_encode,JSON_UNESCAPED_UNICODE定義了一個新選項,它可以按原樣傳遞UTF-8文本而不會將其轉換爲轉義代碼。由於您使用PHP 5.3,你可以不使用它,但如果你有5.4,這是它如何被使用:

$json = json_encode($obj, JSON_UNESCAPED_UNICODE); // PHP 5.4 required 

然而,這應該沒有必要,因爲JSON解析器將解碼的轉義碼。

+0

正如我所說,php 5.3 –

+0

感謝無論如何,這實際上是很多幫助! 解碼後文本是可讀的,似乎我的問題實際上是在進入數據庫時​​斜線消失。 謝謝! –

0
$encoded = json_encode($json); 

$unescaped = preg_replace_callback('/\\\\u(\w{4})/', function ($matches) { 
      return html_entity_decode('&#x' . $matches[1] . ';', ENT_COMPAT,'UTF-8'); 
     }, $encoded); 

file_put_contents('sample.json', $unescaped); 
+0

雖然這可能會回答這個問題,但在回答中加入一些文字以解釋您所做的事情總是一個好主意。閱讀[如何寫出一個好答案](http://stackoverflow.com/help/how-to-answer)。 – jurgemaister