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>
これはエンコードの問題です。ある時点で、データは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内にエンコード用のメタタグを追加する必要があり、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');
UTF-8文字セットヘッダーを送信してみてください。
<?php header ('Content-type: text/html; charset=utf-8'); ?>
HTMLメタ:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
$j_decoded = utf8_decode(json_decode($j_encoded));
[〜#〜] edit [〜#〜]またはより正確にするために$j_encoded = json_encode($j_encoded);
$j_decoded = json_decode($j_encoded);
utf8をen/decodingする必要はありません<meta charset="utf-8" />
同じ問題がありました。データをデータベースにどのように配置するかによって異なる場合がありますが、私に合った方法を試してください:
$str = json_encode($data);
$str = addslashes($str);
データをdbに保存する前にこれを行ってください。
「予期しない文字」エラーが発生した場合、BOM(バイトオーダーマーカーがutf-8 jsonに保存されているかどうかを確認する必要があります。最初の文字を削除するか、BOMがない場合は保存できます。
私にとっては両方の方法
<?php
header('Content-Type: text/html; charset=utf-8');
echo json_encode($YourData, \JSON_UNESCAPED_UNICODE);
私のために働く:)
function jsonEncodeArray( $array ){
array_walk_recursive( $array, function(&$item) {
$item = utf8_encode( $item );
});
return json_encode( $array );
}