PHP的json_encode部分不能在数组上工作

我有一个PHP代码,需要编码DB表数据到JSON。 所以我用json_encode()。

我使用这里给出的表格 – http://www.geekality.net/2011/08/21/country-names-continent-names-and-iso-3166-codes-for-mysql/

这个代码的行为似乎是不同的input。

查询 – $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);来了解它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)... 

这两个arrays看起来一样正确…但Json_encode只适用于'AS',而不是'EU'。

有谁知道如何解决这个问题? 如果是这样,请告诉我..

您应该确保您的Web应用程序的每个组件都使用UTF-8。 从另一个问题的答案会告诉你如何做到这一点。 如果您从RFC4627中阅读 :

编码:JSON文本应以Unicode编码。 默认编码是UTF-8。

json_encode函数要求所有传入的数据都是UTF-8编码的。 这就是为什么像Åland Islands这样的琴弦可能会给你带来麻烦。

这里只是一个随机的猜测: json_encode要求你提供的所有数据都是UTF-8编码的 ,否则就会失败。 在这些失败的国家,您可能拥有包含非ASCII字符的数据。 纯ASCII恰好与UTF-8兼容,您需要特别注意非ASCII字符。 查看UTF-8 ,了解如何从数据库中获取UTF-8编码数据(使用mysqli_set_charset )。