使用ajax时UTF8编码无法正常工作

时间:2010-05-20 21:07:13

标签: ajax utf-8 jquery

我最近改变了一些要通过ajax显示的页面,我对于为什么utf8编码现在在一个框内显示一个问号,而在它没有显示之前有一些混淆。

前例。 oringal页面是index.php。 charset明确设置为utf8,位于<head>。然后我用php来查询数据库

Heres是原始的index.php页面:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="en">
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>Title here</title>
</head>
<body class='body_bgcolor'  >

<div id="main_container">
    <?php 
        Data displayed via php was simply a select statement that output the HTML.  
    ?>
</div>

但是,当我进行更改以添加通过ajax填充“main_container”的菜单时,所有utf8编码都停止工作。这是新代码:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="en">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <title>Title here</title>
    </head>
    <body class='body_bgcolor'  >
<a href="#" onclick="display_html('about_us');"> About Us </a>

    <div id="main_container"></div>

“display_html()”函数调用javascript页面,该页面使用jquery ajax调用来检索存储在php页面中的html,然后将html放在id为“main_container”的div中。我将jquery中的charset设置为utf8,如:

$.ajax({
        async: false,
        type: "GET", 
        url: url, 
        contentType: "charset=utf-8", 
        success: function(data)
            { 
                $("#main_container").html(data);
            }
});

我做错了什么?

4 个答案:

答案 0 :(得分:7)

编码不仅仅是指定元标记和内容类型 - 文件本身必须符合您指定的编码,否则您将获得mojibake

检查所有内容是否都使用UTF-8,数据库,数据库连接,表列。检查您所包含的任何静态文件是否也以UTF-8编码。

答案 1 :(得分:1)

你写了

  

“display_html()”函数调用   使用jquery的javascript页面   ajax调用检索 html   存储在php页面中

你对“存储在php页面中的html”是什么意思?如果要加载数据并在其中显示为<div>,则应将已加载的数据格式化为对应的。我的意思是它应该是真正的HTML代码片段。此外,与'contentType'一起,将'dataType'指定为“html”或“text”是个好主意。如果你不specity任何的jQuery的最后一个版本将“智能尝试以获得结果的基础上,MIME类型的响应”。如果您知道'dataType',那么最好在那里指定。如果使用ajax,则默认使用'async:true'而不是'false'。

您还应该验证jQuery.load方法(请参阅http://api.jquery.com/load/)是否是您的最佳选择。如果需要的话,你可以与马托加载完整的HTML页面显示仅存在一个部分:$('#main_container').load('ajax/about_us.html #container');

关于UTF-8编码不要忘记保存文件真正的UTF-8编码。相应的编辑器中使用的选项(在记事本中选择“另存为”,然后选择作为编码“UTF-8”,而不是“ANSI”)。

答案 2 :(得分:0)

确保所有文件都保存为UTF-8(或UTF-8 w.o.BOM)。

如果您是通过FTP或网络工具上传的,请检查它们是否仍为UTF-8。

答案 3 :(得分:0)

在我的情况下,直到我放置

之前,两种解决方案都无效
header('Content-type: text/html; charset=utf-8');