15

ドイツ語のウムラウトを含むデータベースのデータに問題があります。基本的に、ウムラウトを含むデータを受信すると、それは疑問符の付いた黒い四角になります。置くことでこれを解決しました

mysql_query ('SET NAMES utf8')

クエリの前に。

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

4

5 に答える 5

36

ここで言及されているこの非常にエレガントなソリューションをチェックしてください:

json_encode( $json_full, JSON_UNESCAPED_UNICODE );

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

編集:ウムラウトの問題は、HTML ドキュメントの文字セット、データベース形式、または文字列が通過する以前の php 関数など、さまざまなソースによって引き起こされる可能性があります (ウムラウトに問題がある場合は、マルチバイト関数を確認する必要があります)。

これらの問題は、ほとんどの場合、追跡するのが難しいため、非常に煩わしい傾向があります (ただし、これは数年前ほど悪くはありません)。上記の関数は、尋ねられたように、json_encode のウムラウトの問題を修正しますが、この特定の関数ではなく、アプリケーションの別の部分が問題の原因である可能性が高いです。

于 2017-05-30T13:37:22.063 に答える
6

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

次のテストは私のために働いた:

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

    echo json_encode( $test );
?>
于 2012-11-28T09:52:32.453 に答える
4

ここで重要な点は、json_encode() が UTF-8 エンコーディングのみをサポートすることです。 http://www.php.net/manual/en/function.json-encode.php

すべての文字列データは UTF-8 でエンコードする必要があります。

したがって、utf-8 以外の文字列に特殊文字がある場合、json_encode は null 値を返します。

したがって、プロジェクト全体を utf-8 に切り替えるか、json_encode() を使用する前に任意の文字列を utf8_encode() するようにしてください。

于 2013-12-04T10:34:23.553 に答える
0

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

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

于 2015-08-26T12:19:40.140 に答える