13

DB テーブルのデータを json にエンコードする必要がある PHP コードがあります。そこで、json_encode() を使用しました。

ここにあるテーブルを使用します - http://www.geekality.net/2011/08/21/country-names-continent-names-and-iso-3166-codes-for-mysql/

このコードの動作は、入力ごとに異なるようです。

クエリ - $query = "SELECT * FROM countries ";json 値を返しません。

クエリ - $query = "SELECT * FROM countries where continent_code='AS'";json 値を正しく返します。

一方、$query = "SELECT * FROM countries where continent_code='EU'";何も返しません。

同様に、「NA」、「AF」は機能しませんでしたが、その他は完全に機能しました。

PHP の json_encode のこの動作がおかしいです。

これは私のコードです。

<?php
$con=mysqli_connect('localhost','xxxx','xxxxx','joomla30');
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

$result = mysqli_query($con,"SELECT * FROM countries where continent_code='EU'") or die (mysqli_error($con));

while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
      $orders[] = array(
          'CountryCode' => $row['code'],
          'CountryName' => $row['name']
          );
  }
//print_r($orders);

echo json_encode($orders);

mysqli_close($con);
?>

json_encode の前の行まで、データが運ばれます。だから私はそのjsonエンコードの問題だと思います。

を使って調べてみましたprint_r($orders);
私はそれから次の出力を得ました。

「EU」を試してみると、この配列が得られます。

Array ( [0] => Array ( [CountryCode] => AD [CountryName] => Andorra ) 
[1] => Array ( [CountryCode] => AL [CountryName] => Albania ) 
[2] => Array ( [CountryCode] => AT [CountryName] => Austria ) 
[3] => Array ( [CountryCode] => AX [CountryName] => Åland Islands )...

「AS」を試してみると、この配列が得られます。

Array ( [0] => Array ( [CountryCode] => AE [CountryName] => United Arab Emirates ) 
[1] => Array ( [CountryCode] => AF [CountryName] => Afghanistan) 
[2] => Array ( [CountryCode] => AM [CountryName] => Armenia) 
[3] => Array ( [CountryCode] => AZ [CountryName] => Azerbaijan)...

どちらの配列も似ていますが、Json_encode は「AS」でのみ機能し、「EU」では機能しません。

誰もこの問題を解決する方法を知っていますか? もしそうなら、教えてください..

4

2 に答える 2

28

Web アプリケーションのすべてのコンポーネントが UTF-8 を使用していることを確認する必要があります。別の質問からのこの回答は、これを行う方法を教えてくれます。RFC4627 からこれを読んだ場合:

エンコーディング: JSON テキストは Unicode でエンコードする必要があります。デフォルトのエンコーディングは UTF-8 です。

json_encode 関数では、すべての受信データが UTF-8 でエンコードされている必要があります。そのため、 などの文字列Åland Islandsが問題を引き起こしている可能性があります。

于 2013-11-15T11:10:44.183 に答える
15

ここでのランダムな推測:json_encodeフィードするすべてのデータがUTF-8 でエンコードされている必要があり、それ以外の場合は失敗します。失敗したこれらの国では、ASCII 以外の文字を含むデータが含まれている可能性があります。Pure ASCII はたまたま UTF-8 と互換性があり、特別な注意が必要な非 ASCII 文字です。データベースから UTF-8 でエンコードされたデータを取得する方法 (を使用) については、UTF-8 を最後まで参照してくださいmysqli_set_charset

于 2013-11-15T11:12:26.423 に答える