我在win7(x64)上安装了标准的XAMPP。 在过去的项目中我遇到了编码麻烦,其中mysql编码与php enconding不匹配,后者有时会在其他编码中输出html,我决定使用utf-8对所有内容进行编码。
我刚刚开始使用html标记,而且我已经遇到了麻烦。
ISO_8859-1
一起保存。我后来发现这一点归功于Sherm Pendleys的回答。我不得不返回并将我的项目设置(设置为“ISO-8859-1”)更改为所需的“UTF-8”。 AddCharset UTF-8 .php
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
header('Content-Type:text/html; charset=UTF-8');
该页面显然是在utf-8中提供的(firefox和chrome会识别它),但é
,á
或¡
等任何特殊字符都会显示为{{ 1}}。在查看源代码时也是如此。
删除上述编码设置时,所有字符都会正确呈现,但检测到的编码会显示�
或windows-1252
,具体取决于浏览器。
为什么?我很困惑。我原本期望完全相反的行为 欢迎任何建议,谢谢!
编辑: 希望这会有所帮助。这是响应标题(根据firebug)
ISO-8859-1
答案 0 :(得分:22)
当[删除]编码设置时 上面提到的所有人物 [正确渲染]但是 检测到的编码显示 windows-1252或ISO-8859-1 取决于浏览器。
那就是你真正发送的东西。子弹列表中的所有编码设置都不会以任何方式实际修改输出;他们所做的就是告诉浏览器在解释你发送的内容时要采用什么编码。这就是为什么你得到那些 - 你告诉浏览器你发送的是UTF-8,但它确实是ISO-8859-1。
答案 1 :(得分:12)
就我而言,当浏览器预期latin1
时,数据库返回utf8
。
因此对MySQLi我做了:
mysqli_set_charset($dblink, "utf8");
答案 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á
给了我
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
我希望它有所帮助。