使用ajax时UTF8编码不起作用

使用ajax时UTF8编码不起作用,ajax,utf-8,jquery,Ajax,Utf 8,Jquery,我最近将一些页面改为通过ajax显示,我对utf8编码为什么现在在框内显示问号感到困惑,而以前不是 例如。最初的页面是index.php。字符集被显式设置为utf8,并且位于中。然后我使用php查询数据库 以下是原始index.php页面: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="en"> <head&

我最近将一些页面改为通过ajax显示,我对utf8编码为什么现在在框内显示问号感到困惑,而以前不是

例如。最初的页面是index.php。字符集被显式设置为utf8,并且位于
中。然后我使用php查询数据库

以下是原始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>

我做错了什么?

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

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

你写的

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

“存储在php页面中的html”是什么意思?如果要加载数据并将其显示为
的一个包含项,则应将加载的数据格式化。我的意思是它应该是真正的HTML代码片段。此外,与“contentType”一起,最好将“dataType”指定为“html”或“文本”。如果您没有指定任何内容,jQuery的最新版本将“根据响应的MIME类型,智能地尝试获取结果”。如果您知道“数据类型”,最好在那里指定。如果您使用ajax,也可以使用默认的“async:true”而不是“false”

您还应该验证
jQuery.load
方法(请参阅)是否是您的最佳选择。如果需要,您可以使用mathod加载整个html页面并仅显示其中的一部分:
$(“#main#container”).load('ajax/about#us.html#container')


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

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


如果您通过FTP或web工具上传了它们,请检查它们是否仍然是UTF-8。

在我的情况下,在我放置

header('Content-type: text/html; charset=utf-8');

如果您使用PHPMyAdmin,单击左列中的数据库,然后单击“操作”,我认为这是一个BOM字节顺序标记问题。最后一个选项是更改表排序规则,将它们设置为utf8\u general\u ci之类的值,而不是在对所有数据进行良好备份之前!好的,我把我所有的文件,包括所有的include,从ANSI改为UTF-8。我查看了数据库,但不确定我找对了地方。列在“排序规则”下显示“拉丁语1_瑞典语ci”,但不确定这是什么意思。我如何检查db表/列是否为utf-8?另外,在我将所有文件保存到utf-8后,我现在收到一个错误,说明
“无法发送会话缓存限制器-已发送头”
,但除了将文件保存为utf-8之外,我没有更改任何代码,在我这样做之前,一切都正常……不确定发生了什么。感谢您的帮助就像其他评论所说的,这与字节顺序标记有关。看到其他海报上的其他链接,还有好的,我已经阅读了所有其他帖子。基本上,他们说在
标记之前有一个空格或新行字符。我已经检查了所有代码和所有包含的代码,但仍然得到了相同的结果。我甚至删除了index.php页面中的所有代码,所以看起来是这样的:
…前后没有空格…没有包含其他可能影响页面的文件,当我重新加载页面时,我会收到相同的错误消息。然而,我决定将index.php页面重新保存为ANSI,错误消失了,但编码不好???如果您将index.php保存为UTF-8,然后在十六进制编辑器中打开它,您将看到确实有字符,谢谢您的帮助…有关于编辑器的想法吗?我只用过记事本,记事本2,dreamweaver,写字板。这些东西有用吗?
$.ajax({
        async: false,
        type: "GET", 
        url: url, 
        contentType: "charset=utf-8", 
        success: function(data)
            { 
                $("#main_container").html(data);
            }
});
header('Content-type: text/html; charset=utf-8');