2013-11-15 13 views
11

DBテーブルのデータをjsonにエンコードする必要があるPHPコードがあります。 私はjson_encode()を使用しました。 http://www.geekality.net/2011/08/21/country-names-continent-names-and-iso-3166-codes-for-mysql/PHPでjson_encodeが部分的に動作しない

このコードのbehaviousは異なる入力に対して異なるように思える -

は、私はここで指定したテーブルを使用します。

クエリ - $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は「EU」の「AS」でのみ動作しません。

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

+1

json_encodeには、奇妙なユニコードであるために "Å"に問題があるため、問題は "ÅlandIslands"です。 私は 'mysqli_set_charset($詐欺「UTF8」)を追加 。2分以内に迅速な対応をありがとうUTF-8 –

答えて

24

ウェブアプリケーションのすべてのコンポーネントがUTF-8を使用していることを確認してください。別の質問のThis answerがこれを行う方法を教えてくれます。あなたがread thisからRFC4627:

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

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

+4

にごmysql_connectionを設定してみてください。私は .. – vsriram92

13

json_encodeは、入力したすべてのデータがUTF-8でにエンコードされている必要があります。それ以外の場合は失敗します。これらの国では、失敗する可能性がありますが、非ASCII文字を含むデータがある可能性があります。純粋なASCIIはUTF-8、あなたが特別な世話をする必要がある非ASCII文字と互換性があります。 UTF-8エンコードされたデータをデータベースから取得する方法についてはUTF-8 all the way throughを参照してください(mysqli_set_charsetを使用)。

+5

ありがとう...' それは完璧に働きました これは完璧に機能しました... – vsriram92

+0

ありがとう、私はちょうど私の準備文で次のコード '$ db-> set_charset(" utf8 ");'を追加して、完全に動作します(mysqli_set_charset($ con、 'utf8'); –

関連する問題