从地址栏编码$ _GET变量的一些问题

时间:2011-07-02 15:16:33

标签: codeigniter encoding uri urlencode

我的项目基于CodeIgniter,但我想这个问题根本不是关于它的。

首先,我启用了查询字符串和搜索功能。搜索字符串传递给“searchterm”变量,当我通过表单传递它时,它工作正常,看起来像:

http:// local / home / search /?searchterm = testtesttest

好的,现在当我在搜索表单中输入一些西里尔字符串时,它的工作正常,例如:URI

http:// local / home / search /?searchterm =привет(在chrome中)或 http:// local / home / search /?searchterm = (在IE,Opera等中)

以上两种情况正常,但是当我直接从地址栏输入CYRILLIC搜索字符串时(例如,在Opera或IE中),它不想搜索任何东西。 $ _GET ['searchterm']为空,对于QUERY_STRING,它类似于searchterm = (来自探查器的所有数据)。

我从控制器urldecode我的字符串,但它不知何故不起作用。我也尝试了一些iconv()案例,从我用Google搜索过的,但它们也没有用。

所以问题是为什么除了chrome之外的所有其他浏览器都没有从地址栏中检索CYRILLIC $ _GET变量(如果从那里输入的话)?通过表格一切正常。

先谢谢你,伙计们。希望得到你的帮助。

P.S。 我也发现:

%D0%BD%D0%BE%D1%87%D0%B0%D0%BB%D0%BE

  • 这是从表单传递的,accept-charset设置为UTF-8。在那种情况下,正如我所说,一切正常。和:

%ED%E0%F7%E0%EB%EE

  • 在地址栏中直接输入字符串时会出现在地址栏中。所以我猜每个浏览器都会将我的西里尔符号变成奇怪的东西......我不知道:(

不要忘记使用Chrome一切正常!也许这是因为默认情况下,这个浏览器不像其他浏览器那样以错误的方式编码西里尔符号。

1 个答案:

答案 0 :(得分:0)

我猜这里的部分问题是你在URL中使用UTF-8字符...你可以设置PHP默认使用php.ini文件中的UTF-8或添加{{ 1}}在你的应用程序的某个地方,(如果我不能修改.ini文件,我将它添加到CodeIgniter中的根index.php文件中)。

我在Firefox和Safari中快速测试了日语和你的例子,他们都显示了正确的字符串。有关为UTF-8设置Apache / PHP的更多信息,请参阅this excellent guide