UTF-8编码的html页面显示 (问号)而不是字符

时间:2011-03-26 20:36:56

标签: php html character-encoding xampp special-characters

我在win7(x64)上安装了标准的XAMPP。 在过去的项目中我遇到了编码麻烦,其中mysql编码与php enconding不匹配,后者有时会在其他编码中输出html,我决定使用utf-8对所有内容进行编码。

我刚刚开始使用html标记,而且我已经遇到了麻烦。

  • 我的页面使用utf-8保存(无BOM,我认为
    // update:事实证明并非如此。该文件实际上与ISO_8859-1一起保存。我后来发现这一点归功于Sherm Pendleys的回答。我不得不返回并将我的项目设置(设置为“ISO-8859-1”)更改为所需的“UTF-8”。
  • php是根据.htaccess设置的,用utf-8提供.php-pages:AddCharset UTF-8 .php
  • html有一个元标记,指定:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  • 要测试我设置使用的php header('Content-Type:text/html; charset=UTF-8');

该页面显然是在utf-8中提供的(firefox和chrome会识别它​​),但éá¡等任何特殊字符都会显示为{{ 1}}。在查看源代码时也是如此。

删除上述编码设置时,所有字符都会正确呈现,但检测到的编码会显示windows-1252,具体取决于浏览器。

为什么?我很困惑。我原本期望完全相反的行为 欢迎任何建议,谢谢!

编辑: 希望这会有所帮助。这是响应标题(根据firebug)

ISO-8859-1

7 个答案:

答案 0 :(得分:22)

  

当[删除]编码设置时   上面提到的所有人物   [正确渲染]但是   检测到的编码显示   windows-1252或ISO-8859-1   取决于浏览器。

那就是你真正发送的东西。子弹列表中的所有编码设置都不会以任何方式实际修改输出;他们所做的就是告诉浏览器在解释你发送的内容时要采用什么编码。这就是为什么你得到那些 - 你告诉浏览器你发送的是UTF-8,但它确实是ISO-8859-1。

答案 1 :(得分:12)

就我而言,当浏览器预期latin1时,数据库返回utf8

因此对MySQLi我做了:

 mysqli_set_charset($dblink, "utf8");    

有关详细信息,请参阅http://php.net/manual/en/mysqli.set-charset.php

答案 2 :(得分:6)

检查打印某些文字的.php个文件是否也在utf-8中正确编码。

答案 3 :(得分:5)

最初告诉PDO您的charset ......类似

PDO("mysql:host=$host;dbname=$DB_name;charset=utf8;", $username, $password);

请注意:charset=utf8;部分。

希望它有所帮助!

答案 4 :(得分:2)

我来自巴西,我使用latin1_spanish_ci创建数据库。对于html和我使用的其他所有内容:

charset=ISO-8859-1

数据与éãç一致...有时候我必须使用它的代码放置html的文本,例如:

Ol&aacute;

给了我

Olá

您可以在此页面中找到代码:http://www.ascii.cl/htmlcodes.htm

希望这会有所帮助。我记得这真令人讨厌。

答案 5 :(得分:2)

看起来没有人提到

SET NAMES utf8;

我找到了这个解决方案here,这对我很有帮助。如何申请:

  

要成为所有UTF-8,请在与数据库服务器建立连接后立即发出以下语句:   SET NAMES utf8;

也许这会对某人有所帮助。

答案 6 :(得分:1)

问题是apache正在使用charset来为页面提供服务。我使用Linux,所以我对XAMPP一无所知。我也遇到了同样的问题,我为解决问题所做的是将charset添加到charset配置文件中(默认情况下它被注释)。

在我的情况下,我在/etc/apache2/conf.d/charset中有它,但是,因为您使用Windows,所以位置不同。所以我给你这个想法如何解决它。

最后,我的charset配置文件是这样的:

# Read the documentation before enabling AddDefaultCharset.
# In general, it is only a good idea if you know that all your files
# have this encoding. It will override any encoding given in the files
# in meta http-equiv or xml encoding tags.

AddDefaultCharset UTF-8

我希望它有所帮助。