Javascript 如何编码"&引用;用于URL路径?
我正在尝试用以下内容构建URL:Javascript 如何编码"&引用;用于URL路径?,javascript,urlencode,Javascript,Urlencode,我正在尝试用以下内容构建URL: var myUrl = '/path/to/api/' + encodeURIComponent(str); 但是如果str是。那么浏览器会自动删除路径段,这样URL就会变成/path/to,这不是我想要的 我已尝试将。编码为%2E%2E,但您的浏览器仍会在发送请求之前对其进行重新解释。我能做些什么让path以/path/to/api/。的形式进入我的服务器?我认为这是不受支持的,因为这种行为会违反 来自(我的): URI中允许但没有保留名称的字符 目的被称为
var myUrl = '/path/to/api/' + encodeURIComponent(str);
但是如果str
是。
那么浏览器会自动删除路径段,这样URL就会变成/path/to
,这不是我想要的
我已尝试将
。
编码为%2E%2E
,但您的浏览器仍会在发送请求之前对其进行重新解释。我能做些什么让path以/path/to/api/。
的形式进入我的服务器?我认为这是不受支持的,因为这种行为会违反
来自(我的):
URI中允许但没有保留名称的字符
目的被称为无保留。这些包括大写和小写
字母、十进制数字、连字符、句点、下划线和波浪号
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
在用替换非保留字符方面有所不同的URI
其相应的百分比编码US-ASCII八位字节是等效的:它们
识别相同的资源。然而,URI比较实现
不要总是在比较之前执行标准化(参见第节
6). 为了一致性,在ALPHA的范围内编码的八位字节百分比
(%41-%5A和%61-%7A)、数字(%30-%39)、连字符(%2D)、句点(%2E),
URI不应创建下划线(%5F)或波浪线(%7E)
当在URI中找到生产者和时,应将其解码为
URI规范化器对应的未保留字符
来自(我的):
完整的路径段“.”和“.”仅供使用
在相关参考(第4.1节)中,并作为
参考解析过程(第5.2节)。然而,一些
部署的实现错误地假定引用解析
当引用已经是URI并且因此无法
删除出现在非相对路径中的点段。URI
规格化器应通过应用
删除路径上的\u点\u段,如中所述
):
既然有,除了错误,我们无能为力:
export function encodeUriComponent(str) {
if(str === '.' || str === '..') {
throw new Error(`Cannot URI-encode "${str}" per RFC 3986 §6.2.2.3`)
}
return encodeURIComponent(str);
}
我觉得这是一个比任意修改URL路径更好的选择,这正是我试图通过使用
encodeURIComponent
来避免的。实际上,我已经对文本进行了双重编码,然后在服务器后端取消编码。但是,我的是查询参数,而不是路径的一部分
附:这是写在我的手机上的,稍后我会添加一个示例 这看起来很脆弱-您能更改服务器吗?“../”是备份目录的方式。所以它被解释为你写的。为什么在文件路径的末尾需要
。
?如果您不希望名称从请求中备份到/path/到@Oriol而不是从字符串中备份,那么最好将名称更改。继续尝试,将其粘贴到地址栏:http://stackoverflow.com/questions/35947065/..
然后尝试http://stackoverflow.com/questions/35947065/%2E%2E
--同样的道理。@amflare我认为他很清楚:他想获取用户提供的任意字符串,并将其作为URL的一部分发送到服务器,但是浏览器正在重写某些表单,如果它们在路径中。@JeremyBanks我明白,但我不理解在他的所有示例中坚持使用。
。如果您使用类似于'test'
的东西,他的代码应该可以正常工作。很明显这里还有另一层。也许这是显而易见的,我只是错过了。这太愚蠢了。我应该能够在路径中拥有我想要的任何东西,而不会被重新解释为其他东西。这是过去路径在磁盘上反映文件的情况下的一种过渡,但现在已经不是这样了。无论如何,谢谢你。看起来我是SOL@mpen浏览器不知道该资源是否由磁盘或其他东西支持。@DanielA.White,因此不应做出任何假设。只要通过发送请求,我就会在另一端处理它。@mpen这将是一个巨大的突破性变化。我不确定它在理论上是否应该突破,因为兼容服务器应该已经在执行相同的转换。实际上。。。是的,它可能会中断很多。你是说将编码为%252E%252E
?我可以在服务器上运行一个解码,但是两个解码很奇怪,会引起问题。是的,你的更正是奇怪的。这是一个绕过系统限制的黑客行为,我们不允许改变。