【问题标题】:UTF8 encoding not working when using ajax使用 ajax 时 UTF8 编码不起作用
【发布时间】:2011-02-22 02:24:13
【问题描述】:

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

例如。原始页面是 index.php。 charset 被明确设置为 utf8 并且位于 <head> 中。然后我用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>

但是,当我进行更改以添加一个通过 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 中的字符集设置为 utf8,例如:

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

我做错了什么?

【问题讨论】:

  • 我认为是BOM字节顺序标记问题google.it/…
  • 如果您使用PHPMyAdmin,请单击左侧栏中的数据库,然后单击“操作”。最后一个选项是更改表排序规则,将它们设置为 utf8_general_ci 之类的东西,而不是在对所有数据进行良好备份之前!

标签: ajax utf-8 jquery


【解决方案1】:

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

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

【讨论】:

  • 好的,我将所有文件(包括所有包含)从 ANSI 更改为 UTF-8。我查看了数据库,但不确定我是否找到了正确的位置。这些列在“COLLATION”“Latin1_swedish_ci”下说,但不确定这意味着什么。我还能如何检查数据库表/列是否为 utf-8?此外,在我将所有文件保存为 utf-8 之后,我现在收到一条错误消息,指出 "Cannot send session cache limiter - headers already sent" 但除了将文件保存为 utf-8 之外我没有更改任何代码,并且在我这样做之前一切正常......不确定这是怎么回事。感谢您的帮助
  • 就像其他 cmets 所说的,这与字节顺序标记有关。查看其他海报的其他链接,以及forum.mamboserver.com/showthread.php?t=42814
  • 好的,我已经阅读了所有其他帖子。基本上他们说&lt;?php 之前或?&gt; 标记之后有一个空格或换行符。我已经浏览了所有代码和所有包含,但仍然得到相同的结果。我什至从 index.php 页面中删除了所有代码,所以它看起来像这样:&lt;?php session_start(); ?&gt;...之前或之后的任何地方都没有空格...不包含可能影响它的其他文件当我重新加载页面时,我收到相同的错误消息。但是,我决定将 index.php 页面重新保存为 ANSI,错误消失了,但编码不好???
  • 如果你将 index.php 保存为 UTF-8,然后在十六进制编辑器中打开它,你会看到
  • 感谢您的帮助...关于编辑器的任何想法?我用过的只有notepad、notepad2、dreamweaver、wordpad。这些都行吗?
【解决方案2】:

你写的

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

“存储在 php 页面中的 html”是什么意思?如果要加载数据并在那里显示为&lt;div&gt; 的包含,则加载的数据应格式化为对应。我的意思是它应该是真正的 HTML 代码片段。此外,与“contentType”一起,将“dataType”指定为“html”或“text”是个好主意。如果您不指定任何内容,那么最新版本的 jQuery 将“根据响应的 MIME 类型智能地尝试获取结果”。如果您知道“数据类型”,最好在此处指定。如果你使用 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”)。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      就我而言,在我放置之前,这两种解决方案都不起作用

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

      【讨论】:

        猜你喜欢
        • 2016-03-19
        • 1970-01-01
        • 2014-06-30
        • 2022-01-12
        • 2019-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-27
        相关资源
        最近更新 更多