ドイツのウムラウトを含むデータベースのデータで問題が発生しています。基本的に、ウムラウトを含むデータを受け取ると、それは疑問符の付いた黒い四角形です。私はこれを入れて解決しました
_mysql_query ('SET NAMES utf8')
_
クエリの前。
問題は、クエリの結果に対してjson_encode(...)
を使用するとすぐに、ウムラウトを含む値がnull
を取得することです。これは、ブラウザーで直接php-fileを呼び出すことで確認できます。 JSONにエンコードしてJSでデコードする前にこの文字を置き換える以外の解決策はありますか?
おそらくブラウザでテキストを何らかの方法で表示したいだけなので、1つのオプションは、ウムラウトをHTMLエンティティに htmlentities()
を使用して変更することです。
次のテストは私にとってうまくいきました:
<?php
$test = array( 'bla' => 'äöü' );
$test['bla'] = htmlentities( $test['bla'] );
echo json_encode( $test );
?>
言及したこのかなりエレガントなソリューションをチェックしてください here :
json_encode($json_full, JSON_UNESCAPED_UNICODE);
問題がコードのどこにもない場合は、これで修正できます。
私はこれが古いかもしれないことを知っていますが、ここでより良い解決策:
Utf-8文字セットでドキュメントタイプを定義します。
<?php header('Content-Type: application/json; charset=utf-8'); ?>
すべてのコンテンツがutf_encodedであることを確認してください。 JSONはutf-8でのみ機能します!
function encode_items(&$item, $key)
{
$item = utf8_encode($item);
}
array_walk_recursive($rows, 'encode_items');
これが誰かを助けることを願っています。
ここでの唯一の重要な点は、json_encode()がUTF-8エンコーディングのみをサポートすることです。 http://www.php.net/manual/en/function.json-encode.php
すべての文字列データはUTF-8でエンコードされている必要があります。
したがって、utf-8以外の文字列に特殊文字がある場合、json_encodeはnull値を返します。
したがって、json_encode()を使用する前に、プロジェクト全体をutf-8に切り替えるか、任意の文字列をutf8_encode()に確認してください。
翻訳ファイル自体がUTF-8として明示的に保存されていることを確認してください
その後、キャッシュブロックと翻訳をリロードします