UTF-8 字符编码与 json_encode() 的争论
UTF-8 字符编码与 json_encode() 的争论
这个问题已有答案:
问题
我想获取包含重音字符的行。列 (NAME
) 的编码为 latin1_swedish_ci
。
代码
下面的查询在 phpMyAdmin 中返回 Abord â Plouffe
:
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 框架,但如果可以避免的话,我宁愿不用。
admin 更改状态以发布 2023年5月24日