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> 

Related of "PHP json_encode json_decode UTF-8"

Это проблема с кодировкой. Похоже, что в какой-то момент данные получаются как ISO-8859-1.

Каждая часть вашего процесса должна кодироваться в кодировке UTF-8.

  • Соединение с базой данных

  • Таблицы базы данных

  • Ваш PHP-файл (если вы используете специальные символы внутри этого файла, как показано в приведенном выше примере)

  • Заголовки content-type которые вы выводите

json utf8 кодирует и декодирует:

 json_encode($data, JSON_UNESCAPED_UNICODE) json_decode($json, false, 512, JSON_UNESCAPED_UNICODE) 

force utf8 тоже может быть полезен: http://pastebin.com/2XKqYU49

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

Если ваш исходный файл уже является 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'); 

Попробуйте отправить заголовок Charset UTF-8:

 <?php header ('Content-type: text/html; charset=utf-8'); ?> 

И HTML-мета:

 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
  1. utf8_decode $j_decoded = utf8_decode(json_decode($j_encoded)); EDIT или, вернее, $j_encoded = json_encode($j_encoded); $j_decoded = json_decode($j_encoded); нет необходимости в en / decoding utf8
  2. <meta charset="utf-8" />

если вы получаете ошибку «неожиданного символа», вы должны проверить, есть ли спецификация (маркер байтового заказа), сохраненный в вашем utf-8 json. Вы можете либо удалить первый символ, либо сохранить, если без спецификации.

Работа для меня 🙂

 function jsonEncodeArray( $array ){ array_walk_recursive( $array, function(&$item) { $item = utf8_encode( $item ); }); return json_encode( $array ); }