2009-02-27 4 views
34

나는 쿼리 문자열 값을 다른 쿼리 문자열로 전달하는 자바 스크립트 함수를 가지고있다. 즉자바 스크립트에서 다른 쿼리 문자열의 값이되도록 쿼리 문자열을 인코딩하는 방법은 무엇입니까?

var url = 'http://www.somesite.com/?somequery='; 
url += escape('?key=value1&key2=value2'); 
window.location = url; 

가 파이어 폭스에서 http://www.somesite.com?somequery=?key1=value1&key2=value2로 끝과 IE7 :이 같은 리디렉션 경우, 그러나

http://www.somesite.com/?somequery=%3fkey%3dvalue1%2520%26%2520key2%3value3 

을 :

은 즉, 나는 쿼리 문자열이 원하는 쿼리 문자열을 올바르게 구문 분석 할 수 없습니다.

나는 또한 작동하지 않는 encodeURIComponent를 사용해 보았습니다.

somequery 값을 계속 이스케이프하도록 리디렉션하는 다른 기능이나 해킹이 있습니까 ??

답변

65

encodeURIComponent가 작동합니다. (당신은 나 선도을하지 않을 수있다, 스크립트가 기대하는 내용에 따라 '?').

var c= 'd e' 
var query= '?a=b&c='+encodeURIComponent(c); 
var uri= 'http://www.example.com/script?query='+encodeURIComponent(query); 
window.location= uri; 

은 저를 취합니다

http://www.example.com/script?query=%3Fa%3Db%26c%3Dd%2520e

당신이 위로 마우스를 이동하는 경우 한 번 브라우저의 상태 표시 줄에 디코딩 된 것처럼 보일 수도 있지만 올바른 위치에있게됩니다.

escape/unescape()는 쿼리 매개 변수를 인코딩 할 때 잘못된 요소이며 유니 코드 문자와 잘못된 점을 가져옵니다. escape()가 정말로 필요한 경우는 거의 없습니다.

+0

예, 탈출구가 더 이상 사용되지 않습니다. 잘 했어. –

+0

[질문] – KooiInc

+0

에 '%'가 있어야 할 수도 있습니다.이 기능은 쿼리 문자열을 구문 분석 할 때 두 번 해독해야하지만 작동합니다. 한 번 인코딩하면 브라우저에서 디코딩되지만 두 번 인코딩하면 전혀 디코딩되지 않습니다. 이상한. – rmw

0
javascript:alert(escape('?key=value1&key2=value2')); 

저에게 잘됩니까?

2

네이티브 escape 메서드가 있습니다. 다음과 같이 맞춤 인코더를 만들 수도 있습니다.

function encodeUriSegment(val) { 
    return encodeUriQuery(val, true). 
      replace(/%26/gi, '&'). 
      replace(/%3D/gi, '='). 
      replace(/%2B/gi, '+'); 
} 

이렇게하면 검색어 문자열에 사용 된 키가 대체됩니다. 추가로 필요한 키 - 값 쌍을 추가하여 다른 사용자 정의 인코딩에 적용 할 수 있습니다.

0
function downloadFile(){ 
     var filePath = "C:/Users/HP/Desktop/Project Folder/DemoProject/"; 

     var fileInfo = "Error_Issue Minor Cosmetic & Major Fatal Issues (Demo_Project) (2017)_GeneratedOn_12_21_2017 21924 AM.xlsx"; 
     if((filePath != undefined && filePath.length > 0) && (fileName != undefined && fileName.length > 0)){ 
     var downloadUrl = "../download?fileName="+encodeURIComponent(fileName)+"&filePath="+encodeURIComponent(filePath); 
     $window.location = downloadUrl; 
     }else{ 
     alert("Please define a fileName for downloading..."); 
     } 
} 
관련 문제