2013-11-15 75 views
11

我有一個PHP代碼,需要將DB表數據編碼爲json。 所以我用json_encode()。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'";也不會返回任何內容。

相似的「不適用」,「自動對焦」不起作用,其他人工作完美。

我很奇怪這種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);來了解它。
我從中得到了以下輸出。

如果我嘗試'歐盟',我得到這個數組。

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」。

有誰知道如何解決這個問題? 如果是這樣,請告訴我..

+1

我想,問題是「ÅlandIslands」,因爲json_encode與「Å」有關的問題是一個奇怪的unicode。 試試你mysql_connection設置爲UTF-8 –

回答

24

你應該確保你的web應用程序的每個組件都使用UTF-8。從另一個問題This answer會告訴你如何做到這一點。如果您從RFC4627獲得read this

編碼:JSON文本應以Unicode編碼。默認編碼是UTF-8。

json_encode函數要求所有傳入數據都是UTF-8編碼。這就是爲什麼字符串如Åland Islands可能會導致你的問題。

+4

感謝您在2分鐘內你的快速反應.. 我接着說:mysqli_set_charset($ CON, 'utf-8');' 它完美... – vsriram92

13

這裏只是一個隨機猜測:json_encode要求您輸入的所有數據爲UTF-8編碼爲,否則將會失敗。在這些失敗的國家,您可能擁有包含非ASCII字符的數據。純ASCII恰好與您需要特別照顧的UTF-8,非ASCII字符兼容。有關如何從數據庫中獲取UTF-8編碼數據的信息,請參見UTF-8 all the way through(使用mysqli_set_charset)。

+5

謝謝。 我添加'mysqli_set_charset($ con,'utf8');' 它工作完美... – vsriram92

+0

謝謝,我剛剛在我準備好的聲明中添加了以下代碼:$ db-> set_charset(「utf8」);' –