[php] [Function] URLEncode urldecode
로빈아빠
본문
[Function] URLEncode urldecode
urlencode
urlencode -- 문자열을 URL 인코드합니다.
string urlencode ( string str)
-_.을 제외한 모든 영숫자가 아닌 문자를 퍼센트(%) 사인에 이어지는 두 16진수로 교체하고 공백은 플러스(+) 사인으로 교체한 문자열을 반환합니다. 이는 WWW 폼에서 인코드한 포스트 데이터, application/x-www-form-urlencoded 매체형과 같은 방식의 인코드입니다. 역사적인 이유로 공백을 플러스(+) 사인으로 인코드 하는 점이 RFC1738 인코딩(rawurlencode() 참고)과 다릅니다. 이 함수는 URL의 쿼리 부분에 사용하는 문자열을 인코딩할 때 편리합니다. 다음과 같이 다음 페이지로 변수를 전달합니다:
예 1. urlencode() 예제
주의: HTML 엔티티가 들어있는 변수에는 주의를 기울이십시오. &, ?, ? 같은 것은 브라우저에 의해 파싱되어 변수명 대신에 엔티티가 사용됩니다. 이는 몇년동안 W3C가 두드러지게 이야기해온 문제입니다. 레퍼런스는 여기에 있습니다: http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2 PHP는 .ini 지시어의 arg_seperator를 통하여 W3C가 제시한 세미콜론 인수 구분자 변경을 지원합니다. 불행하게도 대부분의 유저 에이전트는 폼 데이터를 세미콜론 구분 형태로 전송하지 않습니다. 이를 해결하는 가장 현실적인 방법은 구분자로 &를 사용하는 대신 &를 사용하는 것입니다. 이렇게 하면, PHP의 arg_separator를 변경할 필요가 없습니다. &로 내버려두고, 간단히 URL을 htmlentities(urlencode($data))를 사용하여 인코드하십시오.
예 2. urlencode()와 htmlentities() 예제
참고: urldecode(), htmlentities(), rawurldecode(), rawurlencode().
* 특수문자 전송시 에러발생 방지
예제)
aaa.php :
bbb.php :
출력 : 제목 내용
aaa.php 파일을 실행하여 링크를 클릭하면 bbb.php 파일이 실행되어 브라우저에 위와같이 + 기호가 사라진 형태로 나타난다. GET 방식은 특수문자의 전송을 보장해 주지 못한다.
aaa.php 파일을 아래와 같이 수정한다.
출력 : 제목+내용
urldecode
urldecode -- URL 인코드 문자열을 디코드합니다.
string urldecode ( string str)
주어진 문자열의 %## 인코딩을 디코드합니다. 디코드한 문자열을 반환합니다.
예 1. urldecode() 예제
참고: urlencode(), rawurlencode(), rawurldecode().
urlencode
urlencode -- 문자열을 URL 인코드합니다.
string urlencode ( string str)
-_.을 제외한 모든 영숫자가 아닌 문자를 퍼센트(%) 사인에 이어지는 두 16진수로 교체하고 공백은 플러스(+) 사인으로 교체한 문자열을 반환합니다. 이는 WWW 폼에서 인코드한 포스트 데이터, application/x-www-form-urlencoded 매체형과 같은 방식의 인코드입니다. 역사적인 이유로 공백을 플러스(+) 사인으로 인코드 하는 점이 RFC1738 인코딩(rawurlencode() 참고)과 다릅니다. 이 함수는 URL의 쿼리 부분에 사용하는 문자열을 인코딩할 때 편리합니다. 다음과 같이 다음 페이지로 변수를 전달합니다:
예 1. urlencode() 예제
<?php echo '<a href="mycgi?foo=', urlencode($userinput), '">'; ?>
주의: HTML 엔티티가 들어있는 변수에는 주의를 기울이십시오. &, ?, ? 같은 것은 브라우저에 의해 파싱되어 변수명 대신에 엔티티가 사용됩니다. 이는 몇년동안 W3C가 두드러지게 이야기해온 문제입니다. 레퍼런스는 여기에 있습니다: http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2 PHP는 .ini 지시어의 arg_seperator를 통하여 W3C가 제시한 세미콜론 인수 구분자 변경을 지원합니다. 불행하게도 대부분의 유저 에이전트는 폼 데이터를 세미콜론 구분 형태로 전송하지 않습니다. 이를 해결하는 가장 현실적인 방법은 구분자로 &를 사용하는 대신 &를 사용하는 것입니다. 이렇게 하면, PHP의 arg_separator를 변경할 필요가 없습니다. &로 내버려두고, 간단히 URL을 htmlentities(urlencode($data))를 사용하여 인코드하십시오.
예 2. urlencode()와 htmlentities() 예제
<?php echo '<a href="mycgi?foo=', htmlentities(urlencode($userinput)), '">'; ?>
참고: urldecode(), htmlentities(), rawurldecode(), rawurlencode().
* 특수문자 전송시 에러발생 방지
예제)
aaa.php :
<html><body> <a href="bbb.php?data=<?echo "제목+내용";?>">검색 기준 - 제목+내용</a> </body></html>
bbb.php :
<? $data = $_GET["data"]; echo $data; ?>
출력 : 제목 내용
aaa.php 파일을 실행하여 링크를 클릭하면 bbb.php 파일이 실행되어 브라우저에 위와같이 + 기호가 사라진 형태로 나타난다. GET 방식은 특수문자의 전송을 보장해 주지 못한다.
aaa.php 파일을 아래와 같이 수정한다.
<html><body> <a href="bbb.php?data=<?echo urlencode("제목+내용");?>">검색 기준 - 제목+내용</a> </body></html>
출력 : 제목+내용
urldecode
urldecode -- URL 인코드 문자열을 디코드합니다.
string urldecode ( string str)
주어진 문자열의 %## 인코딩을 디코드합니다. 디코드한 문자열을 반환합니다.
예 1. urldecode() 예제
<?php $a = explode('&', $QUERY_STRING); $i = 0; while ($i < count($a)) { $b = split('=', $a[$i]); echo 'Value for parameter ', htmlspecialchars(urldecode($b[0])), ' is ', htmlspecialchars(urldecode($b[1])), "<br />\n"; $i++; } ?>
참고: urlencode(), rawurlencode(), rawurldecode().
관련링크
댓글목록
등록된 댓글이 없습니다.