1

次のようなアクセント付きの文字を含むクエリ結果があります。

CollectionTitle => Afleuréss

jsonしかし、ファイルを書き込んでjson_encode($Result_Array)結果を取得すると、次のように表示されます。

CollectionTitle => NULL  

それから私は使用しましたarray_map()

$res[] = array_map('utf8_encode', $row);

しかし、それは私をもたらします:

CollectionTitle => Afleuréssそれ以外の CollectionTitle => Afleuréss

この問題を解決するためのより良い方法を提案してください。

ありがとう

4

4 に答える 4

2

2番目のものが実際には正しいものです。問題は、ブラウザがエンコーディングを検出できず、デフォルトがデフォルト (おそらく ISO-8859-1) であることです。ブラウザのエンコーディングを切り替えると、正しい文字が表示されます。

于 2013-04-17T06:33:10.163 に答える
1

json_encodeUTF-8 のみをサポートしていますが、アプリの残りの部分は Windows-1252 を使用しています。utf8_encodeISO-8859-1 から UTF-8 に変換される as を使用することはお勧めしません。ISO-8859-1* ではなく Windows-1252 を使用しているため、95% の確率でしか機能しません。

可能かどうかはわかりませんが、可能であれば、この壊れやすい変換コードがどこにも必要ないように、UTF-8 に切り替える必要があります。

*これはおそらく紛らわしいです。ブラウザは、実際には ISO-8859-1 の使用を許可しておらず、代わりに Windows-1252 として扱います。MySQL と同様、Latin1 は Windows-1252 を意味します。どちらもデフォルトです。utf8_encode/decodeもちろん actualISO-8859-1を使用するため、0x80-0x9F の範囲では互換性がありません。

于 2013-04-17T06:40:38.950 に答える
1

HTML ヘッドに追加します。

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

ブラウザーのデフォルトは非 utf8 であるため、適切な HTML doctype が必要であることに注意してください。私が行ったように、簡単なテストを行うことができます。これは機能します。

<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<?php
$title = "Jérôme";
echo $title."<br>";

しかし、meta タグの場所は head タグにあります。HTML ドキュメントは次のようになります。

<!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">

<head>
<title>An XHTML 1.0 Strict standard template</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
</head>

<body>

<?php
$title = "Jérôme";
echo $title."<br>";
?>

それが標準です。

于 2013-04-17T09:59:49.157 に答える