我有一张method="get"
的表单。在表单中,我需要传递CSS文件的URL,但它将其编码为http%3A%2F%2Fwww...
等。
有没有办法在URL破坏文件时停止编码。
由于
答案 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解码通常是自动完成的)
答案 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值替换。