微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

UTF-8字符编码与json_encode较量

如何解决UTF-8字符编码与json_encode较量

// Create an empty array for the encoded resultset
$rows = array();

// Loop over the db resultset and put encoded values into $rows
while($row = MysqL_fetch_assoc($result)) {
  $rows[] = array_map('utf8_encode', $row);
}

// Output $rows
echo json_encode($rows);

解决方法

这个问题已经在这里有了答案

UTF-8贯穿始终 (15个答案)

5年前关闭。

寻求

我正在寻找具有重音符号的行。列(NAME)的编码为latin1_swedish_ci

编码

以下查询Abord â Plouffe使用phpMyAdmin 返回:

SELECT C.NAME FROM CITY C
WHERE C.REGION_ID=10 AND C.NAME_LOWERCASE LIKE '%abor%'
ORDER BY C.NAME LIMIT 30

以下显示期望值(称为函数db_fetch_all( $result )):

  while( $row = mysql_fetch_assoc( $result ) ) {
    foreach( $row as $value ) {
      echo $value . " ";
      $value = utf8_encode( $value );
      echo $value . " ";
    }

    $r[] = $row;
  }

显示的值: 5482 5482 Abord â Plouffe Abord â Plouffe

然后使用json_encode以下代码对数组进行编码:

$rows = db_fetch_all( $result );
echo json_encode( $rows );

问题

Web浏览器收到以下值:

{"ID":"5482","NAME":null}

代替:

{"ID":"5482","NAME":"Abord â Plouffe"}

(或等效的编码形式。)

文档指出json_encode()可以在UTF-8上使用。我可以看到将值从LATIN1编码为UTF-8。json_encode()但是,在调用后,该值变为null

如何json_encode()正确编码UTF-8值?

一种可能的解决方案是使用Zend Framework,但是我希望如果可以避免的话就不要这样做。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。