【发布时间】:2011-02-16 21:59:06
【问题描述】:
任务
我正在寻找具有重音字符的行。列 (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 );
问题
网络浏览器接收到以下值:
{"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,但如果可以避免,我宁愿不使用。
【问题讨论】:
标签: php mysql ajax character-encoding json