我在网站编码方面遇到了很多麻烦。
这是我现在的问题,如果我去analize.php?dialog=árbol
哪个代码是:
<?
echo $_GET['dialog'];
echo "sabía";
我得到:
sabÃa
sabía
我使用的是 ANSI,更改为 UTF-8 会破坏两者。我不明白为什么会发生这种情况,而且上面也没有任何代码。我不关心它们如何显示,因为该文件仅用于从我的数据库获取数据。但我需要做$_GET
正确显示,以便我可以将其包含在查询中。
如何才能做到这一点?
您不能在 URL 中发送字符“í”,URL 必须使用 ASCII 字符集的子集。因此 URL 被编码为?dialog=sab%C3%ADa
在发送到服务器之前由您的浏览器处理。%C3%AD
代表两个字节C3 AD
,这是字符“í”的 UTF-8 编码。您可以通过以下方式确认这一点var_dump($_SERVER['QUERY_STRING']);
。这由 PHP 自动解码,结果是“sabía”的 UTF-8 字节序列,其中“í”使用两个字节进行编码C3 AD
.
您的浏览器正在使用 Windows-1252 或 ISO-8859-1 字符集解释此字节序列。字节C3
在此编码中表示“à”,该字节AD
代表软连字符并且不可见。
两种可能的解决方案:
-
到处使用 UTF-8(推荐!)
-
转换$_GET
使用 Windows-1252/ISO-8859-1(或您想要在站点上使用的任何编码)值mb_convert_encoding
or iconv
(不建议)
- 即使在这种情况下,您也应该设置一个标头,向浏览器宣布您正在使用的编码
简而言之,您需要确保在所有地方都使用相同的编码,并向浏览器指定到底是什么编码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)