Version: 0.1
Type: Function
Category: HTTP
License: Other
Description: Encodes/decodes a string to/from an url-argument compatible one. ("my page" => "my%20page"). I suspect that such functions already exist in the basic package, but I couldn't find them in the doc so I coded some anyway ;-)
<?
// These encode/decode functions are only indispensable for region-specific
// characters under some browsers (like MSIE for example), and harmless in any
// other case, except if the encoded string is an URL/filename beginning with a
// special character (which shouldn't happen anyway), and that you forget to
// decode it.
// THIS SCRIPT IS ABSOLUTELY COMPLETELY TOTALLY PUBLIC DOMAIN
// original author: http://fred.dsimprove.org/
// Create a string of all characters that aren't special and
// thus won't need to be url-encoded:
$urlNormalCharArray = array('09','az','AZ','_','-','.','/') ;
$urlNormalCharStr = '' ;
foreach ($urlNormalCharArray as $span) {
$min = ord($span[0]) ;
if (!($max = ord(@$span[1])))
$max = $min ;
for ($i = $min ; $i <= $max ; $i++)
$urlNormalCharStr .= chr($i) ;
}
// destroy obselete variables (useless but looks pro ;)
unset ($min, $max, $span, $i) ;
unset ($urlNormalCharArray) ;
//echo "<pre>\n" ; print_r ($urlNormalCharStr) ; echo "\n</pre>\n" ; //DEBUG//
//echo urlStrEncode("azerty c'est un trs beau nom")."<br>\n"; //TEST (iso-8859-1)
//echo urlStrDecode("azerty%20c%27est%20un%20tr%e8s%20beau%20nom")."<br>\n"; //TEST//
// and now the functions :
function urlStrEncode ($s) {
if ($s === 0) $s = '0' ;
else if (empty($s)) $s = '' ;
global $urlNormalCharStr ;
$r = '' ;
for ($i=0 ; $i<strlen($s) ; $i++) {
$c = $s[$i] ;
$r .= ( strchr($urlNormalCharStr,$c) ? $c : '%'.dechex(ord($c)) ) ;
}
return $r ;
}
function urlStrDecode ($s) {
if ($s === 0) $s = '0' ;
else if (empty($s)) $s = '' ;
$r = '' ;
for ($i=0 ; $i<strlen($s) ; $i++) {
$c = $s[$i] ;
if ($c == '%') {
$r .= chr(hexdec($s[$i+1].$s[$i+2])) ;
$i += 2 ;
}
else {
$r .= $c ;
}
}
return $r ;
}
// ------
?>