php 에서 urlencode 와 rawurlencode 의 차 이 를 간단히 말 하 다
6159 단어 phpurlencoderawurlencode
다음은 urlencode 함수 와 rawurlencode 함수 의 차 이 를 소개 합 니 다.
urlencode 함수:
문자열 을 되 돌려 줍 니 다.이 문자열 은- 을 제외 합 니 다.이외 의 모든 비 자모 숫자 문 자 는 백분율(%)로 바 뀌 고 두 자리 16 진수 로 바 뀌 며 빈 칸 은 플러스(+)로 인 코딩 됩 니 다.이 인 코딩 은 WWW 폼 POST 데이터 의 인 코딩 방식 과 같 으 며,application/x-ww-form-urlencoded 의 미디어 형식 인 코딩 방식 과 같 습 니 다.역사적 인 이유 로 이 인 코딩 은 빈 칸 을 플러스(+)로 인 코딩 하 는 데 RFC 1738 인 코딩(rawurlencode()참조)과 다 릅 니 다.
rawurlencode 함수:
문자열 을 되 돌려 줍 니 다.이 문자열 은- 을 제외 합 니 다.이외 의 모든 비 자모 숫자 문 자 는 백분율(%)로 바 뀌 고 두 자리 16 진수 로 바 뀝 니 다.이 는»RFC 3986 에서 기술 한 인 코딩 으로,특수 한 URL 의 경계 문자 로 해석 되 지 않도록 원래 의 문 자 를 보호 하 는 동시에 전송 매체(일부 메 일 시스템)에서 문자 변환 을 사용 할 때 흐 트 러 지지 않도록 URL 형식 을 보호 하기 위 한 것 이다.다음은 예 를 들 어 보 겠 습 니 다.
<?php
$string = "hello world";
echo urlencode($string) . '<br/>'; // :hello+world
echo rawurldecode($string) . '<br/>';// :hello%20world
?>
구체 적 인 예 비교:
<?php
for ($i = 0x20; $i < 0x7f; $i++) {
$str .= dechex($i);
}
$asscii = pack("H*",$str);
echo " asscii :( ~)n". $asscii."
";
echo "urlencode :
".urlencode($asscii);
echo "
";
echo "urlencode https://www.jb51.net/ :
".preg_replace("/%.{2}/","",urlencode($asscii));
echo "
";
echo "rawurlencode :
".rawurlencode($asscii);
echo "
";
echo "rawurlencode :
".preg_replace("/%.{2}/","",rawurlencode($asscii));
echo "
";
exit;
?>
:
―――――――――――――――――――――――――――
asscii :( ~)
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz{|}~
urlencode :
+%21%22%23%24%25%26%27%28%29%2A%2B%2C-.%2F0123456789%3A%3B%3C%3D%3E%3F%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E
urlencode :
+-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz
rawurlencode :
%20%21%22%23%24%25%26%27%28%29%2A%2B%2C-.%2F0123456789%3A%3B%3C%3D%3E%3F%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E
rawurlencode :
-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz
두 사람의 결 과 를 비교 하 다.1. 숫자,대소 문자 모두 인 코딩 하지 않 습 니 다.
2. 마이너스 세 개 부호화 안 함
3.rawurlencode 는 urlencode 보다'플러스'를 하나 더 인 코딩 합 니 다.
JavaScript 에서 escape 와 encodeURIComponent 의 차이 점:
>>> console.log(encodeURIComponent(" 1"));
%E7%BB%9F%E4%B8%80%E6%B3%A8%E5%86%8C1
>>> console.log(escape(" 1"));
%u7EDF%u4E00%u6CE8%u518C1
<?php
echo iconv("utf-8","gbk",urldecode("%E7%BB%9F%E4%B8%80%E6%B3%A8%E5%86%8C1"));
echo "
";
echo urldecode("%u7EDF%u4E00%u6CE8%u518C1");
// unescape
//echo iconv("utf-8","gbk",unescape("%u7EDF%u4E00%u6CE8%u518C1");
exit;
?>
:
======================================
1
%u7EDF%u4E00%u6CE8%u518C1
======================================
결과 설명:1.encodeURIComponent 는 항상 입력 을 utf 8 인 코딩 으로 변환 하고 바이트 로 인 코딩 합 니 다.
2.escape 는 유 니 버 설 인 코딩 에 따라 처 리 됩 니 다.url 에 안전 하지 않 은 문자 도 인 코딩 했 기 때문에 url 에서 인 코딩 을 해서 도 사용 할 수 있 습 니 다.하지만 서버 쪽 에 서 는 자동 으로 디 코딩 되 지 않 습 니 다.다음은 PHP 버 전의 디 코딩 함 수 를 제공 합 니 다.매 뉴 얼 에서 찾 습 니 다.
<?php
function unescape($str) {
$str = rawurldecode($str);
preg_match_all("/(?:%u.{4})|&#x.{4};|&#d+;|.+/U",$str,$r);
$ar = $r[0];
foreach($ar as $k=>$v) {
if(substr($v,0,2) == "%u")
$ar[$k] = iconv("UCS-2","UTF-8",pack("H4",substr($v,-4)));
elseif(substr($v,0,3) == "&#x")
$ar[$k] = iconv("UCS-2","UTF-8",pack("H4",substr($v,3,-1)));
elseif(substr($v,0,2) == "&#") {
$ar[$k] = iconv("UCS-2","UTF-8",pack("n",substr($v,2,-1)));
}
}
return join("",$ar);
}
?>
>>> console.log(escape(" !\"#$%&'()*+,-./0123456789:;=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz{|}~"));
%20%21%22%23%24%25%26%27%28%29*+%2C-./0123456789%3A%3B%3C%3D%3E%3F@ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5D%5E_%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E
>>> console.log(encodeURIComponent("!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz{|}~"));
%20!%22%23%24%25%26'()*%2B%2C-.%2F0123456789%3A%3B%3C%3D%3E%3F%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5D%5E_%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D~
>>> console.log(escape("!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz{|}~").replace(/%.{2}/g,""));
*+-./0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz
>>> console.log(encodeURIComponent("!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~").replace(/%.{2}/g,""));
!'()*-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~
결과 비교:escape 인 코딩 되 지 않 은 문자:*+-./@ 총 7 개
encodeURIComponent 인 코딩 되 지 않 은 문자:!()*-. ~ 총 9 개
이상 의 이 간단 한 phop 에서 urlencode 와 rawurlencode 의 차 이 는 바로 작은 편집 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.여러분 께 참고 가 되 고 저희 도 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.