当前位置: 首页 > 面试题库 >

PHP json_encode无法部分处理数组

商池暝
2023-03-14
问题内容

我有一个PHP代码,需要将数据库表数据编码为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);
?>

直到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仅在’AS’上有效,而在’EU’上无效。

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


问题答案:

您应该确保Web应用程序的每个组件都使用UTF-8。另一个问题的答案将告诉您如何执行此操作。如果您从RFC4627中阅读以下内容:

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

json_encode函数要求所有传入数据均采用UTF-8编码。这就是为什么诸如之类的字符串Åland Islands可能会导致您出现问题的原因。



 类似资料:
  • 一些背景信息:这个项目是一个简单的图像,在项目结束时,它将成为我电脑屏幕的背景。 我想模糊背景的一部分,这样文本的一部分就更清晰了。我可以模糊图像中文本本身的部分,但这是我最后的选择。我不想这样做,因为在未来的项目中,我想随着一些东西的移动而主动模糊背景(我还没有开始这个未来的项目,所以我无法更好地描述这个项目)。 有人知道如何模糊背景的一部分吗?对于这个项目,它需要大约400x200像素,模糊1

  • 问题内容: 我正在尝试遍历数组并将每个元素插入表中。据我所知,我的语法是正确的,我直接从Microsoft Azure的文档中获取 了此代码。 当我运行时,它到达然后失败。这是堆栈跟踪。 追溯(最近一次通话最近):在cursor.execute中,文件“ test.py”,第29行(“ INSERT INTO test(序列)值(%s)”,(“ test”))文件“ C:\ Users \ Ale

  • 使用了hibernate、spring mvc。文件夹: 网状物xml 主上下文文件 根上下文。xml 在我成功编译并运行这个应用程序之前,先添加hibernate代码和这个xml文件,然后遇到错误。 错误代码 16:40:50,403错误[org.jboss.as.server](管理-处理程序-线程-12)JBAS015870:部署education.war的部署回滚了以下失败消息:{"JBA

  • 我读过其他的题目,但我不太明白这一点。我有一个使用log4j的EJB模块。我想将该EJB打包到一个JAR文件中,并放在web项目的WEB-INF/lib路径中。web项目有一个从EJB执行函数的servlet,仅此而已。但添加器似乎不起作用,因为文件已创建但未写入。 顺便说一下,我使用的是JBoss7.1.1。

  • 我遇到了一个问题,我无法在我的资源中获取我的表单,变量总是为空 我的资源: 表单模型 我的取货请求: 和我的HttpClient: 为了确保我正在使用代理进行测试并且请求实际上是好的:变量文件名和徽标始终为空。 这是我的绒球.xml: 我不知道问题出在哪里。 我已经看过了多部分的官方resteasy文档,看不出问题在哪里。我已经用MultipartFormDataInput测试过,所有部分都是空的

  • 我正在尝试使用制作多模块项目。您可以通过链接查看我的代码。在分支是工作解决方案,其中所有匕首类都在模块中。 现在,我正在尝试为DI根创建单独的< code>app模块。您可以在< code>develop分支中看到最新的尝试。它不起作用。我想在< code>app模块中创建我的根< code > application component 组件,并从其他模块添加< code > presentat