Я получаю проблемы с данными из базы данных, содержащей немецкие умлауты. В принципе, всякий раз, когда я получаю данные, содержащие умлауты, это черный квадрат с меткой опроса. Я решил это, поставив
mysql_query ('SET NAMES utf8')
перед запросом.
Проблема в том, что, как только я использую json_encode(...)
в результате запроса, значение, содержащее umlaut, получает null
. Я вижу это, вызывая php-файл непосредственно в браузере. Есть ли другое решение, чем замена этих символов перед кодированием на JSON и декодирование его в JS?
Вероятно, вы просто хотите показать тексты как-то в браузере, поэтому одним из вариантов было бы изменение умляутов на объекты HTML с помощью htmlentities()
.
Следующий тест работал на меня:
<?php $test = array( 'bla' => 'äöü' ); $test['bla'] = htmlentities( $test['bla'] ); echo json_encode( $test ); ?>
Я знаю, что это может быть старым, но здесь лучшее решение:
Определите тип документа с помощью кодировки 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');
Надеюсь, это поможет кому-то.
Посмотрите на это довольно элегантное решение, упомянутое здесь :
json_encode($json_full, JSON_UNESCAPED_UNICODE);
Если проблема не в другом месте вашего кода, это должно исправить ее.
Единственным важным моментом здесь является то, что json_encode () поддерживает только кодировку UTF-8. http://www.php.net/manual/en/function.json-encode.php
Все строковые данные должны кодироваться в кодировке UTF-8.
Поэтому, когда у вас есть специальные символы в строке un utf-8, json_encode вернет значение null.
Таким образом, либо вы переключите весь проект на utf-8, либо убедитесь, что вы используете utf8_encode () любую строку перед использованием json_encode ().
убедитесь, что сам файл перевода был явно сохранен как UTF-8
После этого перезагружаются кеширующие блоки и переводы