문자열을 인코드려면 urlencode, rawurlencode를 사용합니다.

rawurlencode 함수는 -_.을 제외한 모든 영숫자가 아닌 문자를 퍼센트(%) 사인에 이어지는 두 16진수로 교체한 문자열을 반환합니다.

이것은 표시 문자가 특별한 URL 구분자로 해석되는 걸 방지하고, 문자 변환이 이루어지는 몇몇 email 시스템 등에서 URL을 보호하기 위한 수단으로 이용됩니다.

urlencode 는 공백을 더하기 부호(+)로 인코드 하는 점 말고는 rawurlencode 와 동일한 기능을 제공합니다.

<?php
 // ex #1
 $foo = '"/:@&%=?.#"';
 $bar = '#$%=+';
 $query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar);
 echo '<a href="mycgi?foo=' . htmlentities($query_string) . '">';
 // 결과: <a href="mycgi?foo=foo=%22%2F%3A%40%26%25%3D%3F.%23%22&amp;bar=%23%24%25%3D%2B">

 // ex #2
 $userinput = 'test.php?/mycgi';
 echo '<a href="mycgi?foo=', urlencode($userinput), '">';
 // 결과: <a href="mycgi?foo=test.php%3F%2Fmycgi">
 ?>

<?php 
 $url = "";
 for($i = 0; $i < strlen($value); $i++) {
      $url .= strpos("/:@&%=?.#", $value[$i]) === False ? urlencode($value[$i]) : $value[$i];
 }
 ?>

<?php
 function fullescape($in){
      $out = '';
      for ($i=0;$i<strlen($in);$i++) {
           $hex = dechex(ord($in[$i]));
           if ($hex=='') 
             $out = $out.urlencode($in[$i]);
           else 
             $out = $out .'%'.((strlen($hex)==1) ? ('0'.strtoupper($hex)):(strtoupper($hex))); 
      }
      $out = str_replace('+','%20',$out);
      $out = str_replace('_','%5F',$out);
      $out = str_replace('.','%2E',$out);
      $out = str_replace('-','%2D',$out);

      return $out;
 }
 ?>

<?php
 $url = "index.php?id=4&pg=2";
 $url = urlencode(urlencode($url));

 echo "<a href=\"javascript:openWin('page.php?url=$url');\">";
 ?>

<?
 $url='mypage.php';
 ?>
 <a href="index.php?page=<? echo encode($url,5); ?>">My page</a>

 <?
 $mypage=$_GET['page'];
 $mypage=decode($mypage,5);
 echo file_get_contents($mypage);

 function encode($ss,$ntime){
    for($i=0;$i<$ntime;$i++){
        $ss=base64_encode($ss);
    }
    retrun $ss;
 }

 function decode($ss,$ntime){
    for($i=0;$i<$ntime;$i++){
        $ss=base64_decode($ss);
    }
    retrun $ss;
 } 
 ?>

다음은 FTP URL을 인코드합니다.

<?php
 echo '<a href="ftp://user:', rawurlencode('foo @+%/'), '@ftp.example.com/x.txt">';
 // 결과: <a href="ftp://user:foo%20%40%2B%25%2F@ftp.example.com/x.txt">
 ?>

URL의 PATH_INFO 안에 경로 정보를 전달하고자 한다면, 다음과 같이 처리해 줍니다.

<?php
 echo '<a href="http://example.com/department_list_script/',
         rawurlencode('sales and marketing/Miami'), '">';
 // 결과: <a href="http://example.com/department_list_script/sales%20and%20marketing%2FMiami">
 ?>

참고로 URL 디코드 함수는 주어진 문자열의 %## 인코딩을 디코드합니다. 다만, $_GET 이나 $_REQUEST 변수에는 이미 디코드되어 반환하므로 따로 디코드 할 필요는 없지만, 디코드 할 경우 우리가 원하지 않는 결과를 가져올 수 있다는 점에 주의가 필요합니다.

0 댓글