反转函数到encodeURI()

时间:2015-10-20 08:13:17

标签: javascript

我正在编写一个集成在两个第三方库之间的组件。

从第一个库中获取一个URL,并将其传递给第二个库。

我得到的网址格式为:

https://xxxxx.s3.amazonaws.com/xxxx_xx_xx/xxxx_xx_xx/xxxxxxxx/g_19743dff-0931-40c4-ac5a-10fd1150bda4/x/xxxxxxxx_xxxx_xx_xx_xx_xx_xx_xxxx_xxx_xxx_xxxxxxxxxx.jpg?AWSAccessKeyId=AKIAJFACFRGCGV7RPFKQ&Expires=1445259633&Signature=RD35q%2BlEc4Lkn5ppfM2QTKsDCTo%3D

意思是它包括像" ="和" +"以编码格式。

当我按原样将其传递给第二个库时,库无法下载该文件。 从该库的来源,我看到它试图执行编码(url)'在下载文件之前,这会导致它再次被编码而不需要。

我尝试在将URL传输到第二个库(使用 decodeURI decodeURIComponent )之前对其进行解码,然后对其进行编码并成功下载该文件,但编码()不编码所有字符,它有一些保留字符(例如' +'和' ='),因此结果网址不会结束与原版相同。

总结我的问题:

假设我无法控制2个库的代码,给定' encodedUrl',我该如何实现' myFunc(str)'这样:

encodeURI(myFunc(encodedUrl)) === encodedUrl

每个可能的网址。

1 个答案:

答案 0 :(得分:0)

由于第一个库为您提供了已编码的网址,因此您无法做到。例如,myFunc只能转为"%2B"进入" +",因为" +"是encodeURI唯一会变成"%2B"。这使得myFunc === decodeURIComponent,你知道这意味着什么。

相关问题