2016-12-20 1 views
3

나는 자바 스크립트 프로토콜 예를 들어, 인코딩 된 URL을 디코딩하는 이유에 대해 혼란 스러워요 : 나는 암호화 및 암호 해독에 이러한 문자열을 사용하고자바 스크립트 프로토콜이 URL을 자동으로 해독하는 이유는 무엇입니까?

<a href="javascript:myFunction('%3DcDO4w67epn64o76');">press</a> 
    function myFunction(id) 
    { 
     alert(id); //it will generate =cDO4w67epn64o76 
    } 

.

나는 진짜 이유와 해결책을 알려주십시오. (그 이유는 나를 위해 매우 중요합니다.) 나는 (=) 부호를 대체 할 수 있다는 것을 알고 있지만, 인코딩 된 나머지 문자열도 디코딩 할 것을 두려워합니다. 래퍼에 의해.

참고 : : PHP에서 GET, REQUEST 글로벌 변수는 url이 자동으로 디코딩됩니다.

답변

3

URL이 예상되는 href 속성에 있기 때문에 브라우저는 javascript 의사 체계를 사용하는 "URL"의 URI 인코딩을 "정상화"합니다.

당신은이 다른 속성에 넣어 다음과 같이, 그것을 얻을 수 있습니다 :

function myFunction(element) { 
 
    console.log(element.getAttribute("data-value")); //it will generate =cDO4w67epn64o76 
 
}
<a href="javascript:;" onclick="myFunction(this)" data-value="%3DcDO4w67epn64o76">press</a>

을 ... 내가 onclick="..." 처리기를 사용하여 낙담하지만. 대신 :

function linkHandler(e) { 
 
    console.log(this.getAttribute("data-value")); 
 
    e.preventDefault(); 
 
} 
 

 

 
var links = document.querySelectorAll("a[data-value]"); 
 
Array.prototype.forEach.call(
 
    links, 
 
    function(link) { 
 
    link.addEventListener("click", linkHandler, false); 
 
    } 
 
);
<a href="javascript:;" data-value="%3DcDO4w67epn64o76">press</a>

+0

귀하의 답변은 지금까지는 [wiki] (https://en.wikipedia.org/wiki/URL_normalization)에서 완벽합니다. 예약되지 않은 인코딩 된 문자를 디코딩하여 정규화가 적용되며 여기 등호가 예약됩니다. ! – mina

1

javascript: 방식을 사용하는 URL은 여전히 ​​URL입니다.

URL의 JavaScript 문자열에 URL을 저장하려고했습니다.

외부 URL을 JavaScript로 디코딩 할 때 인코딩 된 문자 비율이 디코딩됩니다.

는 인코딩을 URL로 자바 스크립트에서 당신이 ( % 같은) 특수 문자를 변환 할 필요가하려고하는 일을합니다 :

<a href="javascript:myFunction('%253DcDO4w67epn64o76')%3B">test</a> 

만하지만 북마크를 만들기 위해 이것을 사용한다.

무언가가 클릭되었을 때 JavaScript를 실행하려면 click 이벤트 처리기를 사용하십시오. onclick 속성을 사용할 수 있지만 현대 접근법에서는 addEventListener을 사용합니다 (현대가 아닌 값은 "1990 년대가 아님").

마찬가지로 어딘가에서 링크하지 않는 경우 링크를 사용하지 마십시오. 대신 버튼을 사용하십시오.

관련 문제