PHP json_encode json_decode UTF-8
Как сохранить строку json-encoded с международными символами в базу данных и затем проанализировать декодированную строку в браузере?
<?php
$string = "très agréable";
// to the database
$j_encoded = json_encode(utf8_encode($string));
// get from Database
$j_decoded = json_decode($j_encoded);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<?= $j_decoded ?>
</html>
Ответы
Ответ 1
Это проблема с кодировкой. Похоже, в какой-то момент данные будут представлены как ISO-8859-1.
Каждая часть вашего процесса должна кодироваться в кодировке UTF-8.
-
Соединение с базой данных
-
Таблицы базы данных
-
Ваш PHP файл (если вы используете специальные символы внутри этого файла, как показано в приведенном выше примере)
-
Заголовки content-type
, которые вы выводите
Ответ 2
json utf8 кодирует и декодирует:
json_encode($data, JSON_UNESCAPED_UNICODE)
json_decode($json, false, 512, JSON_UNESCAPED_UNICODE)
force utf8 тоже может быть полезным: http://pastebin.com/2XKqYU49
Ответ 3
header('Content-Type: application/json; charset=utf-8');
Ответ 4
Если ваш исходный файл уже является utf8, то отключите функции utf8_ *.
php5 хранит строки как массив байтов.
вы должны добавить метатег для кодирования в html И вы должны добавить HTTP-заголовок, который устанавливает transferencoding в utf-8.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
и в php
<?php
header('Content-Type: text/html; charset=utf-8');
Ответ 5
Попробуйте отправить заголовок Charset UTF-8:
<?php header ('Content-type: text/html; charset=utf-8'); ?>
И HTML мета:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Ответ 6
- utf8_decode
$j_decoded = utf8_decode(json_decode($j_encoded));
ИЗМЕНИТЬ
или, вернее, $j_encoded = json_encode($j_encoded);
$j_decoded = json_decode($j_encoded);
нет необходимости в en/decoding utf8
-
<meta charset="utf-8" />
Ответ 7
если вы получили ошибку "неожиданного символа", вы должны проверить, есть ли спецификация (маркер байтового заказа, сохраненный в вашем utf-8 json.
Вы можете либо удалить первый символ, либо сохранить, если без спецификации.
Ответ 8
Работайте со мной:)
function jsonEncodeArray( $array ){
array_walk_recursive( $array, function(&$item) {
$item = utf8_encode( $item );
});
return json_encode( $array );
}
Ответ 9
Для меня оба метода
<?php
header('Content-Type: text/html; charset=utf-8');
echo json_encode($YourData, \JSON_UNESCAPED_UNICODE);