2013-05-18 2 views
0

строка в древнееврейском после json_encode выглядит следующим образом: [{ "ID": "1", "значение": "\ u05d1 \ u05dc \ u05d0 \ u05d2 \ u05df"} любая идея, что такое кодирование, и как мне заставить это работать или быть читаемым снова? BTW, это система Joomla, которая работает на PHP 5.3, строка из почтового запроса, а не база данных и метатег UTF-8.JSON вопрос закодировать юникода на PHP5.3

+0

Это выглядит как unicode. – elclanrs

+0

Возможно, вы можете использовать base64 для кодирования вашей строки и декодировать ее при необходимости – SmasherHell

+0

это нормально, вы можете использовать ее, и вы получите нормальные данные – user2368299

ответ

0

Именно так JSON кодирует символы, отличные от ASCII. Текст будет снова прочитан, когда вы передадите его через парсер JSON.

PHP 5.4 определяет новую опцию для json_encode, JSON_UNESCAPED_UNICODE, которая передает текст UTF-8 через as-is, не преобразовывая его в escape-коды. Так как вы используете 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

Смежные вопросы