JSON响应中的特殊字符(ë)

时间:2012-09-26 10:02:54

标签: php ajax json special-characters

我的数据库存储了一些我必须使用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;`

3 个答案:

答案 0 :(得分:6)

  1. 确保将标题设置为UTF-8:

    header('Content-Type: application/json; charset=utf-8');
    
  2. 确保在任何查询之前使用UTF-8编码建立与数据库的连接:

    $query = mysql_query("SET NAMES 'UTF8'");
    
  3. 据我所知,JSON编码任何无法用纯ASCII表示的字符。你应该在响应时解码那个JSON。

  4. 尝试迁移到PDO,因为mysql_*函数已弃用。使用这个不错的tutorial

答案 1 :(得分:1)

来自JSON RFC-4627:JSON text SHALL be encoded in Unicode. The default encoding is UTF-8. 使用mb_convert_encodingiconv更改字符串编码。

并发送正确的标题:

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" />