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

我有win7(x64)上的标准XAMPP安装。 在过去的项目中,我的编码问题有一个问题,那就是mysql编码与php编译不匹配,而php编译又有时会在其他编码中输出html,所以我决定用utf-8编码。

我刚刚开始使用HTML标记,并已经遇到麻烦。

  • 我的页面使用utf-8保存(没有BOM, 我想
    / /更新:事实certificate,情况并非如此。 该文件实际上是用ISO_8859-1保存的。 我后来发现这一点谢谢谢尔彭德利斯的答案。 我不得不回去改变我的项目设置(设置为“ISO-8859-1”)到所需的“UTF-8”。
  • PHP是设置.htaccess服务.php页面在AddCharset UTF-8 .php与: AddCharset UTF-8 .php
  • html有一个元标记指定: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  • testing我设置使用PHP header('Content-Type:text/html; charset=UTF-8');

这个页面显然是在utf-8中进行的(firefox和chrome可以识别它),但任何特殊字符(如éá¡都会显示为 。 同时查看源代码。

当删除上面提到的编码设置时,所有字符都可以正确呈现,但检测到的编码根据浏览器显示的是windows-1252ISO-8859-1

怎么来的? 我很困惑。 我会预料到完全相反的行为。
欢迎任何build议,谢谢!

编辑:希望这可以帮助更多。 这是响应标题(按照萤火虫)

 HTTP/1.1 200 OK Date: Sat, 26 Mar 2011 20:49:44 GMT Server: Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1 X-Powered-By: PHP/5.3.1 Content-Length: 91 Keep-Alive: timeout=5, max=99 Connection: Keep-Alive Content-Type: text/html; charset=utf-8 

当[删除]上面提到的编码设置时,所有字符[被正确渲染],但是被检测到的编码根据浏览器显示的是windows-1252或者ISO-8859-1。

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

在我的情况下,数据库返回latin1 ,当我的浏览器预期utf8

所以对于MySQLi我做了:

  mysqli_set_charset($dblink, "utf8"); 

请参阅http://php.net/manual/en/mysqli.set-charset.php了解更多信息;

检查是否有任何打印一些文本的.php文件在UTF utf-8也是正确编码的。

告诉PDO你的charset最初….类似

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

注意: charset=utf8; 部分。

希望它有帮助!

我来自巴西,使用latin1_spanish_ci创build我的数据库。 对于html和我使用的其他东西:

 charset=ISO-8859-1 

数据正确与éãç …有时我必须把它的代码的HTML文本,如:

 Ol&aacute; 

给我

 Olá 

你可以在这个页面find代码: http : //www.ascii.cl/htmlcodes.htm

希望这可以帮助。 我记得那真的很烦人。

问题是Apache正在使用的字符集服务页面。 我使用Linux,所以对XAMPP一无所知。 我也有同样的问题,我做了什么来解决这个问题是把字符集添加到字符charsetconfiguration文件(它被默认注释)。

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

最后,我的charsetconfiguration文件是这样的:

 # 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 

我希望它有帮助。

看起来像没有人提到

 SET NAMES utf8; 

我在这里find了这个解决scheme,它帮助了我。 如何申请:

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

也许这会帮助别人。