2015-10-20 32 views
3

我正在编写一个集成两个第三方库之间的组件。反向函数encodeURI()

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

我得到的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(与decodeURIdecodeURIComponent),所以那么它将编码并成功下载该文件,但编码()不编码字符全部,它有一些保留字符(如'+'和'='),所以结果url不会与原来的一样。

综上所述,我的问题:

假设我没有超过2个库的代码的任何控制,因为“encodedUrl”,我怎么能实现“myFunc的(STR)”这样的:

encodeURI(myFunc(encodedUrl)) === encodedUrl 

为每个可能的网址。

+0

你能否发布原始字符串? – LGSon

+0

@LGSon我做到了,这是问题中的网址。只是将一些字母字符替换为'x'来隐藏私人数据 – avivr

+0

这里描述的主要问题在这里描述:http://stackoverflow.com/questions/17010119/decodeuri-decodes-space-as-symbol – LGSon

回答

0

由于第一个库给你编码的URL,你不能。例如,myFunc只能将“%2B”变成“+”,因为“+”是encodeURI变成“%2B”的唯一东西。这使得myFunc === decodeURIComponent,你知道这意味着什么。