web-dev-qa-db-ja.com

PHP json_encodeのドイツ語ウムラウトに関する問題

ドイツのウムラウトを含むデータベースのデータで問題が発生しています。基本的に、ウムラウトを含むデータを受け取ると、それは疑問符の付いた黒い四角形です。私はこれを入れて解決しました

_mysql_query ('SET NAMES utf8')
_

クエリの前。

問題は、クエリの結果に対してjson_encode(...)を使用するとすぐに、ウムラウトを含む値がnullを取得することです。これは、ブラウザーで直接php-fileを呼び出すことで確認できます。 JSONにエンコードしてJSでデコードする前にこの文字を置き換える以外の解決策はありますか?

15
Valentino Ru

おそらくブラウザでテキストを何らかの方法で表示したいだけなので、1つのオプションは、ウムラウトをHTMLエンティティに htmlentities() を使用して変更することです。

次のテストは私にとってうまくいきました:

<?php
    $test = array( 'bla' => 'äöü' );
    $test['bla'] = htmlentities( $test['bla'] );

    echo json_encode( $test );
?>
6
Sirko

言及したこのかなりエレガントなソリューションをチェックしてください here

json_encode($json_full, JSON_UNESCAPED_UNICODE);

問題がコードのどこにもない場合は、これで修正できます。

20
GDY

私はこれが古いかもしれないことを知っていますが、ここでより良い解決策:

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');

これが誰かを助けることを願っています。

12
mffap

ここでの唯一の重要な点は、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()に確認してください。

3
Tarsis

翻訳ファイル自体がUTF-8として明示的に保存されていることを確認してください

その後、キャッシュブロックと翻訳をリロードします

0
ShirtsofHolland