如何在GET上停止浏览器的url-encoding表单值

时间:2010-06-01 11:04:41

标签: html character-encoding urlencode

我有一张method="get"的表单。在表单中,我需要传递CSS文件的URL,但它将其编码为http%3A%2F%2Fwww...等。

有没有办法在URL破坏文件时停止编码。

由于

6 个答案:

答案 0 :(得分:13)

背景

它比人们第一眼看到的更微妙。对于任何URL,这是URI标准的特定形式,某些字符是特殊的。特殊字符包括:(方案分隔符)和/(路径或层次分隔符),这里是RFC-2396中保留符号的完整列表:

reserved    = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
              "$" | ","

它与安全性无关,更多的是仅仅遵循标准:这些符号在任何URI,URL或URN中都是特殊的。当您需要将它们用作路径或查询字符串的一部分时(GET请求为您创建查询字符串),您需要转义它们。转义的简短版本是:将UTF-8字节作为十六进制,并在它们前面加上%符号。对于保留字符,它始终是UTF-8中的单字节字符,因此转义为两个十六进制数字。

解决方案的路径

回到你的问题。你没有提到你使用的语言。但任何与互联网一起使用的语言都有一种编码或解码URL的方法。有些函数需要辅助函数来解码整个URL,但通常最好将其拆分为名称/值对,然后对其进行解码。这将为您提供所需的绝对URL路径。

注意:最好始终解码查询值,因为当人们输入值时,他们不会知道该值是否被保留,浏览器会为您编码。不这样做会带来安全风险。

编辑: 当您需要在页面内解码时,而不是在服务器端解码时,您将需要使用JavaScript来完成这项工作。请查看this page以获取/解码网址,或使用Google查找其他网址。

答案 1 :(得分:6)

不,你不能。需要编码才能生成有效的URL。

相反,解码接收代码中的值(无论如何,你在哪个平台,URL解码通常是自动完成的)

答案 2 :(得分:2)

不是出于安全原因你不能这样做。您必须在接收端收集并解码它。

答案 3 :(得分:1)

当您使用FORM和GET方法以及一些特殊字符时,您将最终使用浏览器对结果查询进行编码。 对于支持更改URL地址而不刷新页面的新浏览器(IE10 +),可以解码URL查询字符串并更新地址。

我正在使用这样的脚本:

    <script type="text/javascript">
    if (history.pushState) { //IE10+
        var newurl = window.location.protocol + "//" + window.location.host + window.location.pathname + decodeURIComponent(window.location.search);
        window.history.pushState({path:newurl},'',newurl);
    }
    </script>

这会将http://example.com/page.html?path=foo%2Fbar转换回http://example.com/page.html?path=foo/bar

答案 4 :(得分:0)

如果您使用XMLHttpRequest,则无需编码即可发送文字。 您可以使用JavaScript执行此操作,但请记住将content-type设置为text/plain

content-type: text/plain

答案 5 :(得分:0)

您可以使用javascript解码网址功能:decodeURIComponent(Url); 因为浏览器会为特殊字符编码Url。例如:https://www.example.com编码为%20https%3A%2F%2Fwww.example.com 。这里特殊字符由%及其ASCI值替换。