Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何编码"&引用;用于URL路径?_Javascript_Urlencode - Fatal编程技术网

Javascript 如何编码"&引用;用于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中允许但没有保留名称的字符 目的被称为

我正在尝试用以下内容构建URL:

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
?我可以在服务器上运行一个解码,但是两个解码很奇怪,会引起问题。是的,你的更正是奇怪的。这是一个绕过系统限制的黑客行为,我们不允许改变。