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 ; } // ------ ?>