JavaScript URL 디코드 기능


157

최고의 JavaScript URL 디코드 유틸리티는 무엇입니까? 인코딩도 좋을 것이고 jQuery와 잘 작동하는 것이 추가 보너스입니다.


36
당신은 확인 했나요 encodeURIComponentdecodeURIComponent?
Gumbo

정말 같은 것입니까?
.

@Gumbo : URL 인코딩 및 URL 디코딩과 동일 – blooberry.com/indexdot/html/topics/urlencoding.htm
at.

답변:


219

내가 사용했습니다 에 encodeURIComponent ()decodeURIComponent () 도 있습니다.


1
고마워요! 정답처럼 보이지만 검보는 .. 나는 그가 신용을받을 권리가 기분이 먼저 대답
에.

16
이것은 불완전한 답변입니다. @anshuman의 urlDecode () 구현을 참조하십시오.
Steven Francolla

3
훌륭하지만 '+'표시를 제거하지 않았습니다. @anshuman의 답변이 저에게 가장 효과적이었습니다
MusikAnimal

2
++++
mmm으로

237

다음은 완전한 기능입니다 ( PHPJS 에서 가져옴 ).

function urldecode(str) {
   return decodeURIComponent((str+'').replace(/\+/g, '%20'));
}

34
+1 : 이것은 진정한 urldecode이며, +로 인코딩 된 공간의 경우를 처리합니다. 고마워
Máthé Endre-Botond

1
이것은 PHP의 urlencode () 함수로 데이터를 인코딩 할 때 사용해야했습니다.
Scott Keck-Warren

1
내가 실수하지 않으면 이것은 공간이 아닌 + 20 %로 디코딩하는 것입니다. 실제로 원하는 것이 아닙니다. 그렇습니까? 다른 버전의 인코딩 된 문자가 아닌 공백이 필요합니다.
Chris Moschini

8
@ChrisMoschini : 아니요. 디코드 호출 전에 교체가 발생하기 때문에 이것이 맞습니다.
lfaraone

1
정말 고맙습니다!! 이것은 이전에 PHP로 urlencode 된 jquery에서 문자열을 처리하는 완벽한 방법입니다.
단테 컬 라리

9

이것을 사용하십시오

unescape(str);

나는 훌륭한 JS 프로그래머가 아니며 모두 시도해 보았습니다.


2
멋진 답변이지만 비 ASCII 문자에 대한 지원이 부진 하여 더 이상 사용되지 않는 것처럼 보입니다 decodeURIComponent().
Brad Koch

9
decodeURIComponent(mystring);

이 코드를 사용하여 전달 된 매개 변수를 얻을 수 있습니다.

//parse URL to get values: var i = getUrlVars()["i"];
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;
}

또는이 하나의 라이너는 매개 변수를 가져옵니다.

location.search.split("your_parameter=")[1]

2
window.location.search대신 사용해야 합니다.
aloisdg codidact.com으로 이전

3
//How decodeURIComponent Works

function proURIDecoder(val)
{
  val=val.replace(/\+/g, '%20');
  var str=val.split("%");
  var cval=str[0];
  for (var i=1;i<str.length;i++)
  {
    cval+=String.fromCharCode(parseInt(str[i].substring(0,2),16))+str[i].substring(2);
  }

  return cval;
}

document.write(proURIDecoder(window.location.href));

고마워, 이것은 나를 위해 일했다. decodeURIComponent가 나를 위해 작동하지 않았습니다 (잘못된 URI 시퀀스).
Smile4ever

2

urlencode를 사용하여 PHP에서 데이터 인코딩을 담당하는 경우 PHP의 rawurlencode는 + 문자를 바꾸지 않고도 JavaScript의 decodeURIComponent와 함께 작동합니다.


0

내가 사용한 것은 다음과 같습니다.

자바 스크립트에서 :

var url = "http://www.mynewsfeed.com/articles/index.php?id=17";
var encoded_url = encodeURIComponent(url);

var decoded_url = decodeURIComponent(encoded_url);

PHP에서 :

$url = "http://www.mynewsfeed.com/articles/index.php?id=17";
$encoded_url = url_encode(url);

$decoded_url = url_decode($encoded_url);

http://www.mynewsfeed.x10.mx/articles/index.php?id=17에서 온라인으로 시도 할 수도 있습니다.



0

decodeURIComponent()괜찮지 만 encodeURIComponent()직접 사용하지 마십시오 . 이 같은 예약 된 문자 탈출에 실패 *, !, ', (,와 ). 이에 대한 자세한 정보는 RFC3986을 확인하십시오 . Mozilla Developer Network 문서는 좋은 설명과 해결책을 제공합니다. 설명...

RFC 3986 (!, ', (,) 및 *를 보유 함)을보다 엄격하게 준수하기 위해 이러한 문자에 정규화 된 URI 구분 사용이없는 경우에도 다음을 안전하게 사용할 수 있습니다.

해결책...

function fixedEncodeURIComponent(str) {
  return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
    return '%' + c.charCodeAt(0).toString(16);
  });
}

확실하지 않은 경우 JSBin.com에서 제대로 작동하는 데모를 확인하십시오 . 이것을 직접 사용 encodeURIComponent()하는 JSBin.com나쁜 데모 와 비교하십시오 .

좋은 코드 결과 :

thing%2athing%20thing%21

잘못된 코드 결과 encodeURIComponent():

thing*thing%20thing!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.