我在使用土耳其字符集的rawurldecode时遇到了一些问题。
我有一个土耳其语(yeşil表示绿色),需要作为GET参数传递。
这是我生成的链接。
search.php?renk=ye%C5%9Fil
当我点击此链接时,浏览器地址栏就会显示出来。 (它被正确解码)
search.php?renk=yeşil
问题从这里开始。当我在浏览器地址栏中修改url时(比如添加额外的get参数)并按Enter键修改关键字并生成如下所示的URL。
search.php?renk=ye%FEil
此点之后服务器端代码不处理参数并生成错误结果。有没有标准的方法来避免这种情况?
感谢。
答案 0 :(得分:4)
看起来您的浏览器会将链接转换为iso-8859-9编码或类似内容。 %FE是来自iso-8859-9编码的urlencoded。
我已经尝试了iconv("iso8859-9", "utf-8", rawurldecode("search.php?renk=ye%FEil"))
并且有效。
答案 1 :(得分:0)
网址总是使用US-Ascii!
请参阅RFC:http://www.ietf.org/rfc/rfc1738.txt
没有相应的图形US-ASCII:
只能使用图形的可打印字符编写URL US-ASCII编码字符集。八位字节80-FF十六进制不是
在US-ASCII中使用,八位字节00-1F和7F十六进制表示
控制字符;这些必须编码。
现在你遇到了很多问题。 如果将URL粘贴到浏览器中,则url字段有时会依赖于OS区域设置。 浏览器可以转换它。 有时防火墙和代理可以过滤网址!
下一个重要问题是: Web服务器如何解释这些高字符。 它是如何将它转移到PHP(取决于网关)。 php自动解码网址,你会在那里发生什么事情? php不关心编码。
在我看来,这只是一个可以解决的解决方案。 将unicodestring编码为base64encoded字符串。 这将保存在网址中 - 因为它是ascii。
在您的脚本中,您可以对其进行解码,然后将其恢复为您之前设置的编码。