2015-10-20 68 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,你知道這意味着什麼。