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