今、私自身の意見では、このエンコーディングの問題についてすべてを試し、多くの回答された質問を調べましたが、何もうまくいかなかったので、ここに行きます.
テーブルを持つ MySQL データベースがありUsers
ます。このテーブルには、照合が設定されている「firstname」のutf8_general_ci
列があります (すべての varchar 列はそうです)。次に、スカンジナビアの特殊文字「ø」を使用して、firstname-column が「Løw」に設定されている行を挿入しました。
接続文字列が ";charset=utf8" である php-ActiveRecord ライブラリを使用して行を取得し、その後、次のようにユーザーを json として出力します。
$user = User::find($ID);
$userArr = $user->to_array();
header('Content-Type: application/json; charset=utf-8');
print(json_encode($userArr));
これで有線の作業が始まります。ファーストネームは、MySQL データベースに表示される "Løw" ではなく、"L\u00f8w"になりました。json_encode
次に、これが関数なしでも当てはまるかどうかを確認しようとしました。
$user = User::find($ID);
$userArr = $user->to_array();
header('Content-Type: text/plain; charset=utf-8');
print_r($userArr);
しかし、ここでは出力は正しく、ファーストネームは "Løw" でした。次に、配列内のフィールドを にエンコードしようとしました。これは、次のようにutf-8
、文字列が機能するかどうかを誰もが教えてくれたからです。utf-8
$return[] = array_map('utf8_encode', $userArr);
print_r(json_encode($return));
しかし、これは私に"L\u00c3\u00b8w"を与えたので、うまくいきませんでした。私はそれをutf8_decodeするアイデアがなかったので、次に試しました:
$return[] = array_map('utf8_decode', $userArr);
print_r(json_encode($return));
しかし、それにより文字列は"null"として返されました。次に、vars がデータベースから出てきたときのエンコーディングを確認しようとしました。次のようにします。
header('Content-Type: text/plain; charset=utf-8');
print(mb_detect_encoding($userArr['firstname']));
しかし、これは戻ってきUTF-8
ました。
ご覧のとおり、私はすべてを試しましjson_encode
たが、「ø」文字を「\u00f8」に変更する理由がまだわかりません。助けてください。独自の json_encode-method を作成したくありません。