这个问题已经在这里有了答案 :
UTF-8贯穿始终 (15个答案)
5年前关闭。
寻求
我正在寻找具有重音符号的行。列(NAME)的编码为latin1_swedish_ci。
NAME
latin1_swedish_ci
编码
以下查询Abord â Plouffe使用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 )):
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
5482 5482 Abord â Plouffe Abord â Plouffe
然后使用json_encode以下代码对数组进行编码:
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()
null
如何json_encode()正确编码UTF-8值?
一种可能的解决方案是使用Zend Framework,但是我希望如果可以避免的话就不要这样做。
// 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);