1

私のコントローラーでは、Affilinet API から製品データを xml 形式で取得し、製品リスト用の html 文字列を作成しています。その後、phpjson_encode関数を使用して、そのhtmlを含む配列をエンコードします。

$data = array('listHtml' => $listHtml,'pagingHtml':$pagingHtml);
echo json_encode($data);

私のステージングサーバーとライブサーバーでは、コードは完全に正常に機能していますが、同じデータで、コードはローカルサーバーでこれを返しています

{"listHtml":null,"pagingHtml":"some html"}

$listHtml にはドイツ語の文字が含まれています。問題は、私のオンライン サーバーではコードが $listHtml を UTF-8 でエンコードされたものとして扱いますが、ローカル サーバーでは別のものとして扱われることです。

それ以外に、ドイツ語の文字を含む文字列を印刷すると、オンライン サーバーでは問題なく動作しますが、ローカル サーバーではドイツ語の文字がめちゃくちゃになります。では、テキストを UTF-8 でエンコードされたものとして解釈するようにローカル サーバーを構成するにはどうすればよいでしょうか。

4

2 に答える 2

2

実際に HTMLを作成する前に、 utf8_encodeを使用して、いつでも文字列を UTF-8 エンコードできます。json_encode

$data = array('listHtml' => utf8_encode($listHtml),'pagingHtml' => utf8_encode($pagingHtml));
echo json_encode($data);

これが発生する理由は、HTML にドイツ語文字をサポートしない UTF-8 以外のエンコーディングが含まれている場合json_encode、指定された入力の解析に失敗する可能性があるためです。

例えば:

echo json_encode(array('a' => mb_convert_encoding('Üß', 'ISO-8859-1', 'UTF-8')));

{"a":null}ISO-8859-1 でエンコードされた文字列内のドイツ語の文字が原因で返されます。

于 2012-09-28T12:14:39.413 に答える
1

Apacheを使用している場合は、httpd.confファイルを変更して、次のように追加または変更できます(すでに存在する場合)。

    AddDefaultCharset utf-8
于 2012-09-28T12:20:02.917 に答える