php
PHP - 문자열 URL 인코드 함수
문자열을 인코드려면 urlencode, rawurlencode를 사용합니다.
rawurlencode 함수는 -_.을 제외한 모든 영숫자가 아닌 문자를 퍼센트(%) 사인에 이어지는 두 16진수로 교체한 문자열을 반환합니다.
이것은 표시 문자가 특별한 URL 구분자로 해석되는 걸 방지하고, 문자 변환이 이루어지는 몇몇 email 시스템 등에서 URL을 보호하기 위한 수단으로 이용됩니다.
urlencode 는 공백을 더하기 부호(+)로 인코드 하는 점 말고는 rawurlencode 와 동일한 기능을 제공합니다.
다음은 FTP URL을 인코드합니다.
URL의 PATH_INFO 안에 경로 정보를 전달하고자 한다면, 다음과 같이 처리해 줍니다.
참고로 URL 디코드 함수는 주어진 문자열의 %## 인코딩을 디코드합니다. 다만, $_GET 이나 $_REQUEST 변수에는 이미 디코드되어 반환하므로 따로 디코드 할 필요는 없지만, 디코드 할 경우 우리가 원하지 않는 결과를 가져올 수 있다는 점에 주의가 필요합니다.
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&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 댓글