Проблема с Jars_encode Charset

Когда я использую json_encode для кодирования моих многоязычных строк, он также меняет специальные символы. Что делать, чтобы сохранить их одинаковыми.

Например

<? echo json_encode(array('şüğçö')); 

Он возвращает что-то вроде ["\ u015f \ u00fc \ u011f \ u00e7 \ u00f6"]

Но я хочу ["şüğçö"]

попробуй:

 <? echo json_encode(array('şüğçö'), JSON_UNESCAPED_UNICODE); 

В JSON любой символ в строках может быть представлен escape-последовательности Unicode. Таким образом, "\u015f\u00fc\u011f\u00e7\u00f6" семантически равно "şüğçö" .

Хотя этот символ также можно использовать plain, json_encode вероятно, предпочитает escape-последовательности Unicode, чтобы избежать проблем с кодировкой символов.

  • Вы не должны этого
  • Это определенно возможно, даже без PHP 5.4.

Сначала используйте json_encode() для кодирования строки и сохранения ее в переменной.

Затем просто используйте preg_replace() чтобы снова заменить все \ uxxxx на unicode.

PHP 5.4 добавляет параметр JSON_UNESCAPED_UNICODE , который делает то, что вы хотите. Обратите внимание, что json_encode всегда выводит UTF-8.

json_encode() не предоставляет никаких параметров для выбора кодировки, в которой кодировка находится в версиях до 5.4.

 <?php print_r(json_decode(json_encode(array('şüğçö')))); /* Array ( [0] => şüğçö ) */ 

Так вам действительно нужно держать эти персонажи незанятыми в JSON?

Решение Jars_encode charset для PHP 5.3.3

Поскольку JSON_UNESCAPED_UNICODE не работает в PHP 5.3.3, поэтому мы использовали этот метод и он работает.

 $data = array( 'text' => 'Päiväkampanjat' ); $json_encode = json_encode($data); var_dump($json_encode); // text: "P\u00e4iv\u00e4kampanjat" $unescaped_data = preg_replace_callback('/\\\\u(\w{4})/', function ($matches) { return html_entity_decode('&#x' . $matches[1] . ';', ENT_COMPAT, 'UTF-8'); }, $json_encode); var_dump($unescaped); // text is unescaped -> Päiväkampanjat