PHP json_encode json_decode UTF-8

Как сохранить строку с кодировкой json с международными символами в базе данных, а затем проанализировать закодированную строку в браузере?

<?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> 
23
задан 16.05.2020, 19:38

9 ответов

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

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

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

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

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

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

23
ответ дан 16.05.2020, 19:43
  • 1
    Необходимо обновить форматирование. Не легко читать. – Flat Eric 09.11.2019, 07:45
  • 2
    Я думаю, что это - лучший ответ, я должен проверить свое кодирование DB! – FFish 16.05.2020, 19:43
  • 3
    Вы могли добавить, что код должен был выполнить все это. – Pedro Moreira 16.05.2020, 19:44

кодирование и декодирование json utf8:

json_encode($data, JSON_UNESCAPED_UNICODE)

json_decode($json, false, 512, JSON_UNESCAPED_UNICODE)

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

40
ответ дан 16.05.2020, 19:39

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

0
ответ дан 16.05.2020, 19:39

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

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

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

И HTML-мета:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
5
ответ дан 16.05.2020, 19:41
  1. 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
  2. <meta charset="utf-8" />
4
ответ дан 16.05.2020, 19:41
  • 1
    хорошо, я вижу. Я имею к utf8_decode () также.. Существует ли различие, делающее utf8_decode (json_decode ($j_encoded)) по сравнению с json_decode (utf8_decode ($j_encoded))? – FFish 16.05.2020, 19:42
  • 2
    да это, и быть корректным Вы shouldn' t использование utf8_encode так или иначе. но способом, которым Вы использовали его, является poit. 1 Вы кодируете utf8 тогда json, таким образом, для узнавания ваше мнение Вас должны декодировать json и затем utf8 – teemitzitrone 16.05.2020, 19:42
  • 3
    @Pekka, если Вы портите кодирование так или иначе (см. utf8_encode) необходимо исправить его. хорошо, don' t портят кодирование, также решение и i' ve отредактировал мой ответ для отражения этого – teemitzitrone 16.05.2020, 19:43
  • 4
    Почему можно было бы быть нужно utf8_decode() (который преобразовывает в ISO-8859-1) в среде UTF-8? – Pekka 웃 16.05.2020, 19:43

Работа для меня:)

function jsonEncodeArray( $array ){
    array_walk_recursive( $array, function(&$item) { 
       $item = utf8_encode( $item ); 
    });
    return json_encode( $array );
}
0
ответ дан 16.05.2020, 19:42

Для меня оба метода

<?php

header('Content-Type: text/html; charset=utf-8');

echo json_encode($YourData, \JSON_UNESCAPED_UNICODE);
0
ответ дан 16.05.2020, 19:42
  header('Content-Type: application/json; charset=utf-8');
28
ответ дан 16.05.2020, 19:44
  • 1
    хм, интересный... изучит это как альтернативный подход к проблеме. – VinnyD 09.11.2019, 07:43

Теги

Похожие вопросы