2

我对带有土耳其字符集的 rawurldecode 有一些问题。

我有一个土耳其词(yeşil 表示绿色),需要作为 GET 参数传递。

这是我生成的链接。

search.php?renk=ye%C5%9Fil

当我单击此链接时,浏览器地址栏会这样显示。(它被正确解码)

search.php?renk=yeşil

问题从这里开始。当我在浏览器地址栏中修改 url(如添加额外的 get 参数)并点击输入浏览器修改关键字时,它会生成如下所示的 url。

search.php?renk=ye%FEil

此后,服务器端代码不处理参数并生成错误结果。有什么标准方法可以避免这种情况吗?

谢谢。

4

2 回答 2

4

看起来您的浏览器将链接转换为 iso-8859-9 编码,或类似的东西。%FE 是来自 iso-8859-9 编码的 urlencoded ş。

我试过iconv("iso8859-9", "utf-8", rawurldecode("search.php?renk=ye%FEil"))了,它奏效了。

于 2011-08-26T11:05:42.827 回答
0

网址总是使用 US-Ascii !

参见 RFC:http ://www.ietf.org/rfc/rfc1738.txt

没有对应的图形 US-ASCII:

URL 仅使用 US-ASCII 编码字符集的图形可打印字符编写。US-ASCII中不
使用八位字节 80-FF 十六进制,八位字节 00-1F 和 7F 十六进制表示
控制字符;这些必须被编码。

现在你遇到了很多问题。如果您将 url 粘贴到浏览器中,则 url 字段有时依赖于操作系统区域设置。浏览器可能会转换它。有时防火墙和代理可能会过滤 url!

下一个重要问题是:Web 服务器如何解释这些高字符。它如何将其传输到 php(取决于网关)。php 会自动解码 url,你的高字符会发生什么?php 不关心编码。

在我看来,这是唯一一种可以保存的解决方案。将您的 unicodestring 编码为 base64encoded 字符串。这将保存在 url 中 - 因为它是 ascii。

在您的脚本中,您可以对其进行解码,然后将其恢复为您之前设置的编码。

于 2011-08-26T11:33:19.020 回答