php json_encode不能部分地处理数组

vsr*_*m92 13 php json

我有一个PHP代码,需要将DB表数据编码为json.所以我使用了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);
?>
Run Code Online (Sandbox Code Playgroud)

直到上一行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 )...
Run Code Online (Sandbox Code Playgroud)

如果我尝试'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)...
Run Code Online (Sandbox Code Playgroud)

两个阵列看起来都很相似......但是Json_encode只适用于'AS',而不适用于'EU'.

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

Way*_*tty 27

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

编码:JSON文本应以Unicode编码.默认编码为UTF-8.

json_encode函数要求所有传入数据都是UTF-8编码的.这就是为什么字符串Åland Islands可能会导致你的问题.

  • 感谢您在2分钟内快速回复..我添加了`mysqli_set_charset($ con,'utf8');`它工作得很完美...... (4认同)

dec*_*eze 14

这里只是随机猜测:json_encode要求您输入的所有数据都是UTF-8编码的,否则将失败.这些失败的国家/地区可能包含非ASCII字符的数据.纯ASCII恰好与UTF-8兼容,您需要特别注意非ASCII字符.有关如何从数据库中获取UTF-8编码数据(使用),请参阅UTF-8mysqli_set_charset.

  • 谢谢..我添加了`mysqli_set_charset($ con,'utf8');`它工作得很完美...... (6认同)