簡體   English   中英

使用Java腳本刪除Base64編碼的URL參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM