2010-08-16 3 views
1

this article에서 설명한대로 .NET에서 URL 매개 변수를 디코딩합니다. 일부 경우 자바 스크립트에서 URL 매개 변수를 가져와야합니다. 그러나 문제는 일부 매개 변수 값이 '='로 끝나는 것입니다.Strip Base64로 인코딩 된 URL 매개 변수 (자바 스크립트 포함)

예 : 항목 ID = Jj1TI9KmB74 = & 고양이 = 1 개

자바 스크립트 기능 : 나는 내 문제가에 대한 루프하지만 난에 분할 기능에 알고

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;} 

그것을 해결하는 방법을 모른다. jsuri도 사용했으나 문제는 여전히 존재합니다. Javascript에서이 문제를 해결할 수 있습니까? 아니면 암호화 방법을 다시 고려해야합니까?

답변

1

URI에 쿼리 = 인코딩되지 않은있는 것은 유효하지 않습니다. 당신은 그것을 벗어나야합니다. 당신이 정말로이 작업을 수행하기 위해 필요한 경우, 완성도,이 시도 :

추가 참고 : 당신이 그것을 자동으로 디코딩됩니다 서버 측 (예를 들어, $ _GET)에, URI 인코딩을 사용하여 =을 탈출합니다. 그러나 JavaScript와 location을 사용하려면 먼저 디코드하여 (decodeURIComponent) 작업해야합니다. 대신 일을

: 다음은 (첫 번째는, 키 이름에 대한 값의 나머지 기호에 해당하기 전에 비 욕심 일치) 대신 이렇게, 표지판이 너무 분할에 해당

hash = hashes[i].split('='); 

를 :

match = hashes[i].match(/([^=]+?)=(.+)/); 
key = match[1]; 
value = match[2]; 
2

URL에 인코딩되지 않은 =이 있으면 유효하지 않습니다. 이 작업을 올바르게 수행하려면 base64로 인코딩 된 데이터에 encodeURIComponent()을 추가로 적용해야합니다.

base64 인코딩이 여전히 의미가 있는지 여부는 사용자가 결정하는 것입니다.

참조 : RFC 3986: Reserved characters

0

나는 당신이 = 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]); 
} 
관련 문제