Подтвердить что ты не робот

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> 
4b9b3361

Ответ 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);