댓글 검색 목록

[php] PHP urlencode rawurlencode – 차이점 및 사용시기

페이지 정보

작성자 운영자 작성일 20-04-20 10:43 조회 1,711 댓글 0

URL 미스터리 


PHP의 urlencode 및 rawurlencode에 대한 초보자 자습서에 오신 것을 환영합니다. 이것은 많은 사람들이 깊이 이야기하고 싶지 않은 주제입니다. 어느 것이 맞습니까? 어느 것을 사용해야 합니까? 

내가 찾은 다른 온라인 자습서에는 피부에 대한 예가 많았고 그 백만 달러짜리 질문에 대답하지 않았습니다. 

따라서 urlencode와 rawurlencode의 차이점을 간단히 설명하면 다음과 같습니다.


  • urlencode는 HTML 양식이 정확히 인코딩되는 방식이므로 쿼리 문자열을 구성하는 데 사용해야 합니다.
  • rawurlencode는 RFC3986에 따라 작동하므로 경로 및 파일 이름에서 사용해야 합니다.

그러나 URL 인 코드 디코딩 기능을 어떻게 사용합니까? 쿼리 문자열을 작성하는 데 왜 필요한가요? 자세한 내용을 설명하기 위해 이 안내서의 몇 가지 예를 살펴 보겠습니다. 계속 읽으십시오!


ⓘ이 튜토리얼을 시작할 때 모든 예제 소스 코드가 포함 된 zip 파일을 포함 시켰으므로 모든 내용을 복사하여 붙여 넣을 필요가 없습니다.


다운로드 


먼저 약속 된 모든 예제 소스 코드에 대한 다운로드 링크가 있습니다.


소스 코드 다운로드 


모든 예제 소스 코드를 다운로드하려면 여기를 클릭하십시오. MIT 라이센스에 따라 릴리스 했으므로 코드 위에 빌드하거나 자신의 프로젝트에서 자유롭게 사용할 수 있습니다.


빠른 시작 

  • 폴더에 다운로드하여 압축을 풉니다.
  • 관련된 데이터베이스가 없으므로 포함 된 각 파일을 따라 가십시오.

URLENCODE 


이제 URL 인코딩 및 디코딩의 기본 사항 – 사용 대상 및 사용 방법을 시작하겠습니다.


빠른 복구 – HTML 양식 제출 


먼저 HTML 양식에 대한 초보자를 간단히 살펴 보겠습니다. 그러나 이것이 URL 인코딩과 어떤 관련이 있습니까? 우리는 거기에 도착할 것입니다.


<!DOCTYPE HTML> <html> <head> <title>FORM GET EXAMPLE</title> </head> <body> <form method="get" action="1b-server.php"> <label for="user-name"> Name: </label> <input type="text" name="user-name" required value="John Doe"/> <label for="user-email"> Email: </label> <input type="email" name="user-email" required value="john@doe.com"/> <input type="submit" value="Submit Form"/> </form> </body> </html> 


위 양식을 제출하면 양식 데이터가 포함 된 쿼리 문자열을 사용하여 지정된 서버 스크립트로 리디렉션됩니다. 예를 들면 http : //localhost/1b-server.php? user-name = John + Doe & user-email = john % 40doe.com입니다.


URL 인코딩이란 무엇입니까? 


John Doe의 빈 공간이 John + Doe로 대체 되었습니까? 또한 이메일의 @이 john % 40doe.com으로 바뀝니까? 그렇습니다. 바로 URL 인코딩에 관한 것입니다. URL과 쿼리 문자열을 구성하는 방법에 대한 몇 가지 규칙이 있습니다.


  • 영숫자가 아닌 모든 문자는 퍼센트 부호 (%)로 대체되고 해당하는 16 진 코드가 이어집니다.
  • 공백은 더하기 (+) 기호로 바뀝니다.
  • 대시, 밑줄, 마침표 (-_.)는 유일한 예외이며 그대로 남아 있습니다.

쿼리 문자열에 대한 자세한 내용을 보려면 아래 엑스트라 섹션에 Wikipedia 링크를 남겨 두겠습니다.


PHP에서 URL 인코딩 


HTML 양식에서는 method = "get"을 설정하기 만하면 제출시 양식 데이터를 쿼리 문자열로 자동 URL 인코딩합니다. PHP에서는 urlencode (STRING) 함수를 사용하여 동일한 작업을 수행 할 수 있습니다.


<?php // Here is some dummy data $data = [ "name" => "John Doe", "email" => "john@doe.com" ]; // We can create a query string with urlencode $query = "?"; foreach ($data as $key=>$value) { $query .= urlencode($key) . "=" . urlencode($value) . "&"; } $query = substr($query, 0,-1); // strip the last & echo $query; ?> 


예를 들어 서버 간 통신을 원할 수 있습니다.


<?php // Here is some dummy data $data = [ "name" => "John Doe", "email" => "john@doe.com" ]; // Build query string $query = "?"; foreach ($data as $key=>$value) { $query .= urlencode($key) . "=" . urlencode($value) . "&"; } $query = substr($query, 0,-1); // Let's say that we have to send some data to this URL // $targetURL = "http://another-site.com/form.php"; $targetURL = "http://localhost/1b-server.php"; $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => $targetURL . $query, // ! QUERY STRING APPENDED TO URL CURLOPT_RETURNTRANSFER => true, CURLOPT_HEADER => false ]); $result = curl_exec($curl); if ($result === false) { echo curl_error($curl); echo curl_errno($curl); } else { print_r($result); } curl_close($curl); ?> 


URL DECODE 


일반적으로 PHP 스크립트에서 쿼리 문자열은 $_GET 전역 변수로 자동 구문 분석됩니다. HTML 양식을 제출 한 후 위의 예제를 따르십시오.


<?php foreach ($_GET as $key=>$value) { echo "KEY - $key | VALUE - $value" . PHP_EOL; } ?> 


그러나 검색어 문자열이 포함 된 URL이 있다고 가정 해 보겠습니다. 데이터를 검색하기 위해 parse_url 또는 urldecode 함수를 사용할 수 있습니다.


<?php // This is the URL that we will work with $url = "http://ninja.com/page.php?user-name=John+Doe&user-email=john%40doe.com"; // Extract the query string part $query = parse_url($url, PHP_URL_QUERY); // The quick way parse_str($query, $data); print_r($data); // The slow way using urldecode $data = explode("&", $query); foreach ($data as $chunkA) { $chunkB = explode("=", $chunkA); echo "KEY - " . urldecode($chunkB[0]) . "<br>"; echo "VALUE - " . urldecode($chunkB[1]) . "<br>"; } ?> 


RAWURLENCODE 


위의 섹션에서는 URL 인코딩 및 디코딩에 대해 거의 설명해야 하지만 조금 더 오래 살펴보면 "대체"원시 URL 인코딩 버전이 있다는 것을 알게 될 것입니다.


왜 RAW? 차이점이 뭐야? 


그렇다면 왜 두 가지가 있습니까? 짧은 이야기 – 혼란스러운 사이버 세계에 오신 것을 환영합니다. 사람들에게 눈물을 흘리지 않을 몇 가지 상충되는 역사가 있지만 위의 소개와 다른 점은 다음과 같습니다.


  • urldecode : application / x-www-form-urlencoded 미디어 유형과 동일하게 HTML 양식이 인코딩되는 방식과 동일한 방식으로 작동합니다.
  • rawurldecode : RFC 3986에 따라 동일한 방식으로 작동합니다.

그것들은 다소 비슷하지만 rawurldecode에는 약간의 차이가 있습니다.


  • 마찬가지로 모든 알파벳이 아닌 숫자는 퍼센트 부호 (%)로 대체되고 그 뒤에 해당하는 16 진 코드가 표시됩니다.
  • 공백은 더하기 부호 (+) 대신 % 20으로 바뀝니다.
  • 대시, 밑줄, 마침표 및 물결표 (-_. ~)는 예외입니다 (추가 물결표).

간단한 연습 예는 차이점을 보여줍니다.


<?php // The string $query = "dash-underscore_period.tilde~empty space"; // In URL encode // dash-underscore_period.tilde%7Eempty+space echo "URL encode: " . urlencode($query) . "<br>"; // In raw encode // dash-underscore_period.tilde~empty%20space echo "Raw encode: " . rawurlencode($query) . "<br>"; ?> 


각각을 사용하는 경우 


다시 간단히 이야기하십시오.


  • 경로 세그먼트에서 rawurlencode를 사용하십시오.
  • 그러나 쿼리 세그먼트에는 urlencode를 사용하십시오.


<?php // Let's say that we are building a link that contains a query string $host = "http://localhost/"; // Raw encode the path $path = rawurlencode("send reports") . "/" . rawurlencode("monthly report.php"); // URL encode the query $data = [ "to" => "John Doe", "email" => "john@doe.com" ]; $query = "?"; foreach ($data as $key=>$value) { $query .= urlencode($key) . "=" . urlencode($value) . "&"; } $query = substr($query, 0, -1); // The complete "safe" link ?> <a href="<?= $host . $path . $query ?>">Click Here</a> 



유용한 비트 


이것이 이 프로젝트의 전부이며, 여기에 도움이 될만한 추가 정보에 대한 작은 섹션이 있습니다.


참조 


  • PHP URL Encode
  • PHP URL Decode
  • Raw URL Encode
  • Raw URL Decode
  • Query Strings – Wikipedia

CHEAT SHEET 


php-urllencode-small.jpg 



댓글목록 0

등록된 댓글이 없습니다.

웹학교 로고

온라인 코딩학교

코리아뉴스 2001 - , All right reserved.