我从网址获得的字符,例如www.mydomain.com/?name=john,很好,因为它们不是俄语。
如果他们是俄语,我会得到' '。
所以我添加了$ name = iconv(“cp1251”,“utf-8”,$ name);现在它适用于俄语和英语字符,但搞砸了其他语言。 :)))
例如'Jānis'(拉脱维亚语)在iconv之前工作正常,现在变成'jДЃnis'。
是否有任何通用编码器能够兼容西里尔语并且不会搞砸其他语言?
答案 0 :(得分:3)
为什么不在所有文件和进程中使用UTF-8?
答案 1 :(得分:2)
实际上这可以解决URL编码的问题。如果您单击给定页面上的链接,浏览器将使用页面的编码发送请求,但如果您将URL直接输入浏览器的地址栏,则行为在某种程度上是未定义的,因为没有标准化的方法要使用的编码(Firefox提供about:config
开关以使用UTF-8编码的URL。)
除了使用某些编码检测之外,无法知道给定请求中URL使用的编码。
修改强>
为了备份我上面所说的,我写了一个小的测试脚本,显示了五种主要浏览器的默认行为(在我的情况下运行Mac OS X - 在IE的情况下通过Parallels运行Windows Vista):
$p = $_GET['p'];
for ($i = 0; $i < strlen($p); $i++) {
// this displays the binary data received via the URL in hex format
echo dechex(ord($p[$i])) . ' ';
}
致电http://path/to/script.php?p=äöü
会导致
c3 a4 c3 b6 c3 bc
c3 a4 c3 b6 c3 bc
c3 a4 c3 b6 c3 bc
e4 f6 fc
e4 f6 fc
显然,前三个使用UTF-8编码的URL,而Opera和IE使用ISO-8859-1或其某些变体。 结论:您无法确定通过网址发送的文字数据的编码是什么。
答案 2 :(得分:1)
似乎问题是文件编码,您应始终使用 UTF-8无BOM 作为.php
文件的首选编码,代码编辑器,例如 {{ 3}} 让你轻松指定(UTF-8 Plain)。
此外,在输出之前,请将以下代码添加到您的文件中:
header('Content-Type: text/html; charset=utf-8');
您还应该阅读Joel Spolsky撰写的alt text http://i48.tinypic.com/ok4a4k.png。