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