我的数据库存储了一些我必须使用AJAX获得的文本。这很顺利,但只有当它不包含特殊字符,如ë或ä时。我找到了一些关于这个主题的文章告诉我要更改AJAX请求的字符集,但这些都不适用于我。
当我开始使用firebug时,它说了这个标题:
Antwoordheaders(荷兰为响应头)
Cache-Control no-store,no-cache,must-revalidate,post-check = 0,pre-check = 0
连接关闭
内容长度94
Content-Type text / html;字符集= ISO-8859-15
2012年9月26日星期三09:52:56格林威治标准时间
到期日,1981年11月19日08:52:00格林尼治标准时间
Pragma no-cache
服务器Apache
X-Powered-By PleskLin
Verzoekheaders(dutch for requestheaders)
接受text / html,application / xhtml + xml,application / xml; q = 0.9, / ; q = 0.8
接受编码gzip,deflate
Accept-Language nl,en-us; q = 0.7,en; q = 0.3
授权基本c3BvdGlkczp6SkBVajRrcw ==
连接保持活着
Content-Type text / html;字符集= ISO-8859-15
Cookie __utma = 196329838.697518114.1346065716.1346065716.1346065716.1; __utmz = 196329838.1346065716.1.1.utmcsr =(直接)| utmccn =(直接)| utmcmd =(无); PHPSESSID = 2h4vu8gu9v8fe5l1t3ad5agp86
DNT 1
主持www.spotids.com
参考者http://www.spotids.com/private/?p=16
User-Agent Mozilla / 5.0(Windows NT 6.1; WOW64; rv:14.0)Gecko / 20100101 Firefox / 14.0.1
两个标题都在讨论charset = ISO-8859-15,它应该包含像ë这样的字符,但它对我不起作用。
我用于此的代码(PHP):
`$newresult = mysql_query($query2); $result = array(); while( $row = mysql_fetch_array($newresult)) { array_push($result, $row); } $jsonText = json_encode($result); echo $jsonText;`
答案 0 :(得分:6)
确保将标题设置为UTF-8:
header('Content-Type: application/json; charset=utf-8');
确保在任何查询之前使用UTF-8编码建立与数据库的连接:
$query = mysql_query("SET NAMES 'UTF8'");
据我所知,JSON编码任何无法用纯ASCII表示的字符。你应该在响应时解码那个JSON。
尝试迁移到PDO,因为mysql_*
函数已弃用。使用这个不错的tutorial
答案 1 :(得分:1)
来自JSON RFC-4627:JSON text SHALL be encoded in Unicode. The default encoding is
UTF-8.
使用mb_convert_encoding
或iconv
更改字符串编码。
并发送正确的标题:
header('Content-Type: application/json;charset=utf-8');
echo json_encode($data);
答案 2 :(得分:0)
验证Content-Type meat
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />