带有西里尔文本的$ _GET编码问题

时间:2010-03-07 21:23:37

标签: php encoding

我正在尝试此代码(在我的本地网络服务器上)

<?php
echo 'the word is / думата е '.$_GET['word'];
?>

但输入时会导致结果损坏?word =проба

the word is / думата е ����

文档保存为“UTF-8无BOM”,标题也是UTF-8。 我尝试过urlencode()和urldecode(),但效果相同。 在网络服务器上传时,效果正常......

5 个答案:

答案 0 :(得分:3)

如果您尝试发送HTTP Content-type标头,以指示浏览器您的网页正在生成哪个编码/字符集,该怎么办?

例如,这样的事情可能会有所帮助:

header('Content-type: text/html; charset=UTF-8');
echo 'the word is / думата е '.$_GET['word'];

当然,如果你正在生成HTML - 你可能就是。


考虑到服务器级别的配置设置定义了默认发送的编码,也许服务器上的默认编码是正常的 - 而本地服务器上的默认编码不是。

自己发送这样的标题可以解决问题:它可以确保编码始终设置正确。

答案 1 :(得分:2)

我想您正在使用Apache Web服务器。

Apache配置存在一个常见问题 - 配置中带有“AddDefaultCharset”的行应该被注释掉(在行的开头添加#,或者用“AddDefaultCharset off”替换行)因为它“覆盖任何” meta http-equiv或xml编码标签中的文件中给出的编码“。

在我当前的安装(Apache2 @ Ubuntu Linux)中,该行可在“/etc/apache2/conf.d/charset”中找到,但在其他(Linux / Unix)设置中可以在“/ etc / apache2 / httpd”中找到。 conf“,或”/etc/apache/httpd.conf“(如果您使用的是Apache 1)。如果您在这些文件中找不到它,可以使用“cd / etc / apache2; grep -r AddDefaultCharset *”(对于Apache 2 @ Unix / Linux)进行搜索。

答案 2 :(得分:0)

如果您从AJAX收到$ _GET,请确保您的UTF-8编码的blablabla.js文件。您也可以使用iconv("cp1251","utf8",$_GET['word']);以UTF-8显示$ _GET ['word']

答案 3 :(得分:0)

看看Changing the server encoding。读起来很棒!

干杯!

答案 4 :(得分:0)

我刚遇到问题,如果你用htmlentities()过滤GET变量,有时会发生这种情况。似乎这个函数将西里尔字符转换成奇怪的东西。