проблемы с немецкими умляутами в php кодировании json


У меня проблемы с данными из базы данных, содержащей немецкие умлауты. В принципе, всякий раз, когда я получаю данные, содержащие умлауты, это черный квадрат со знаком допроса. Я решил эту проблему, поставив

mysql_query ('SET NAMES utf8')

Перед запросом.

Проблема в том, что как только я использую json_encode(...) в результате запроса, значение, содержащее умляут, получает null. Я могу убедиться в этом, вызвав php-файл непосредственно в браузере. Есть ли другое решение, кроме замены этих символов раньше кодирование в JSON и декодирование в JS?

Author: Valentino Ru, 2012-11-28

5 answers

Вероятно, вы просто хотите каким-то образом отобразить тексты в браузере, поэтому одним из вариантов было бы изменить умлауты на HTML-объекты с помощью htmlentities().

Для меня сработал следующий тест:

<?php
    $test = array( 'bla' => 'äöü' );
    $test['bla'] = htmlentities( $test['bla'] );

    echo json_encode( $test );
?>
 5
Author: Sirko, 2012-11-28 09:52:32

Ознакомьтесь с этим довольно элегантным решением, упомянутым здесь:

json_encode($json_full, JSON_UNESCAPED_UNICODE);

Если проблема больше нигде в вашем коде не обнаружена, это должно исправить ее.

 12
Author: Johannes Grandy, 2017-05-30 13:37:22

Я знаю, что это может быть старым, но здесь лучшее решение:

Определите тип документа с помощью кодировки utf-8:

<?php header('Content-Type: application/json; charset=utf-8'); ?>

Убедитесь, что все содержимое закодировано в utf_encoded. JSON работает только с utf-8!

function encode_items(&$item, $key)
{
    $item = utf8_encode($item);
}
array_walk_recursive($rows, 'encode_items');

Надеюсь, это кому-то поможет.

 11
Author: mffap, 2013-05-27 06:18:29

Единственным важным моментом здесь является то, что json_encode() поддерживает только кодировку UTF-8. http://www.php.net/manual/en/function.json-encode.php

Все строковые данные должны быть закодированы в кодировке UTF-8.

Поэтому, если у вас есть какие-либо специальные символы в строке, отличной от utf-8, json_encode вернет нулевое значение.

Поэтому либо вы переключаете весь проект на utf-8, либо убедитесь, что вы utf8_encode() любую строку, прежде чем использовать json_encode().

 3
Author: Tarsis, 2013-12-04 10:34:23

Убедитесь, что сам файл перевода был явно сохранен как UTF-8

После этого перезагрузите блоки кэша и переводы

 0
Author: ShirtsofHolland, 2015-08-26 12:19:40