[英]Strip Base64-encoded URL parameters with Javascript
在解釋我在.NET解碼我的URL參數這篇文章 。 在某些情況下,我需要獲取Javascript中的URL參數。 但是問題在於某些參數值以'='結尾。
示例: ?itemID = Jj1TI9KmB74 =&cat = 1
JavaScript函數:
function getUrlVars() {
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for (var i = 0; i < hashes.length; i++) {
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;}
我知道我的問題出在for循環的split函數中,但我不知道如何解決。 我也為此使用jsuri ,但問題仍然存在。 我可以用Javascript解決這個問題還是需要重新考慮我的加密方法?
URL中的未編碼=
無效。 為此,您必須在base64編碼數據上另外應用encodeURIComponent()
。
那么,base64編碼是否仍然有意義,將由您決定。
參考: RFC 3986:保留字符
URI查詢中的=
未編碼無效。 你應該逃避它。 但是,出於完整性考慮,如果您確實需要執行此操作,請嘗試以下操作:
而不是做:
hash = hashes[i].split('=');
如果后續的等號也被拆分,請改為這樣做(鍵名的第一個等號之前為非貪婪匹配,其余為值):
match = hashes[i].match(/([^=]+?)=(.+)/);
key = match[1];
value = match[2];
我假設您無法控制生成= s的過程? 正如Pekka所說的那樣。
但是,您可以在第一個=處手動斷開字符串,例如
var i = hashes[i].indexof('=');
if (i > 0)
{
var key = hashes[i].substring(0,i);
vars.push(key);
if ((i+1) < hashes[i].length)
{
vars[key] = hashes[i].substring(i+1);
}
}
else
{
// No value
vars.push(hashes[i]);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.