2013. 11. 1.

PHP에서 인코딩한 문자열을 JAVASCRIPT에서 디코딩 하기.

PHP의 변수를 자바스크립트 함수의 매개변수로 전달 해야 할 경우가 있다. 매개변수로 전달되는 값에 따라 자바스크립트 오류가 발생하기도 한다. 도대체 왜 그런 걸까.

<a href="#" onClick="myFunction('<?php echo $value; ?>')">
    클릭!
</a>

function myFunction( form ){
    //처리.
}

대략 이런 경우가 있다고 해보자. 저 $value값에 따옴표라던가, 어떤 값이 들어가면 제대로 함수가 실행이 안된다. $value값을 <ega>\"ag 라 가정하자. 페이지를 불러와서 해당 링크를 클릭해보면 아무런 반응이 없다. 왜그럴까?

PHP는 서버단에서 실행되는 언어다. 문제 확인을 위해 페이지가 다 로딩 된 후 소스보기로 HTML 소스를 확인해보자.

<a href="#" onClick="myFunction(' <ega>"ag ')">

확인해본 소스는 이렇다. 함수 안의 매개변수에 포함된 " 큰따옴표가 함수를 중간에서 잘라 끝내 버린 격이 돼버린 것.

그래서 필요한 게 인코딩이다. 저런 특수 문자들을 희한한 문자들로 바꿔 준다.
인코딩된 문자열을 받은 myFunction() 함수는 디코딩 함수를 통해 원래 값을 가져오면 된다.
아래는 인코딩과 디코딩을 사용하여 상단 예제를 바꾼 것이다.

<a href="#" onClick="myFunction('<?php echo rawUrlEncode($value); ?>')">

function myFunction( form ){
    form = decodeURIComponent(form) ;
    //처리.
}

PHP에서 rawUrlEncode()는 자바스크립트의 encodeURIComponent()와 같고,
PHP에서 rawUrlDecode()는 자바스크립트의 decodeURIComponent()와 같다.

출처는 역시 스택오버플로우.
http://stackoverflow.com/questions/1105434/php-javascript-url-encoding

댓글 없음 :

댓글 쓰기