web-dev-qa-db-ja.com

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
FFish

これはエンコードの問題です。ある時点で、データはISO-8859-1として表されるように見えます。

プロセスのすべての部分をUTF-8でエンコードする必要があります。

  • データベース接続

  • データベーステーブル

  • PHPファイル(上記の例に示すように、そのファイル内で特殊文字を使用している場合)

  • content-type出力するヘッダー

23
Pekka 웃

json utf8エンコードおよびデコード:

json_encode($data, JSON_UNESCAPED_UNICODE)

json_decode($json, false, 512, JSON_UNESCAPED_UNICODE)

force utf8も役立つかもしれません: http://Pastebin.com/2XKqYU49

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

ソースファイルが既にutf8である場合は、utf8_ *関数を削除します。 php5は文字列をバイトの配列として保存しています。

html内にエンコード用のメタタグを追加する必要があり、transferencodingをutf-8に設定するhttpヘッダーを追加する必要があります。

<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

とPHPで

<?php
header('Content-Type: text/html; charset=utf-8');
11
Bernd Ott

UTF-8文字セットヘッダーを送信してみてください。

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

HTMLメタ:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
5
Coquevas
  1. tf8_decode$j_decoded = utf8_decode(json_decode($j_encoded));[〜#〜] edit [〜#〜]またはより正確にするために$j_encoded = json_encode($j_encoded);$j_decoded = json_decode($j_encoded); utf8をen/decodingする必要はありません
  2. <meta charset="utf-8" />
4
teemitzitrone

同じ問題がありました。データをデータベースにどのように配置するかによって異なる場合がありますが、私に合った方法を試してください:

$str = json_encode($data);
$str = addslashes($str);

データをdbに保存する前にこれを行ってください。

0
Michał Moskal

「予期しない文字」エラーが発生した場合、BOM(バイトオーダーマーカーがutf-8 jsonに保存されているかどうかを確認する必要があります。最初の文字を削除するか、BOMがない場合は保存できます。

0
Blox

私にとっては両方の方法

<?php

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

echo json_encode($YourData, \JSON_UNESCAPED_UNICODE);
0
EVGENIY DANILOV

私のために働く:)

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