Dans la plupart des cas, il est OK pour utilisation url_decode () mais pas si vous avez des caractères UTF dans les pages.
Il est converti en% uXXXX entités qui url_decode () ne prend pas en charge.
J'ai googlé le net et trouvé une fonction qui convertit effectivement ces entités en entités HTML (& # xxx;) que votre navigateur peut afficher correctement.
Si vous êtes OK avec cela, la fonction peut être trouvée ici: http://pure-essence.net/stuff/code/utf8 ... ecode.phps
Mais il n'était pas OK avec moi parce que j'avais besoin d'une chaîne de caractères pour faire quelques comparations et d'autres choses.
J'ai donc modifié la fonction ci-dessus
j'ai réussi à atteindre mon objectif:
- Code: Tout sélectionner
<?php
function unescape($source, $iconv_to = 'UTF-8') {
$decodedStr = '';
$pos = 0;
$len = strlen ($source);
while ($pos < $len) {
$charAt = substr ($source, $pos, 1);
if ($charAt == '%') {
$pos++;
$charAt = substr ($source, $pos, 1);
if ($charAt == 'u') {
// we got a unicode character
$pos++;
$unicodeHexVal = substr ($source, $pos, 4);
$unicode = hexdec ($unicodeHexVal);
$decodedStr .= code2utf($unicode);
$pos += 4;
}
else {
// we have an escaped ascii character
$hexVal = substr ($source, $pos, 2);
$decodedStr .= chr (hexdec ($hexVal));
$pos += 2;
}
}
else {
$decodedStr .= $charAt;
$pos++;
}
}
if ($iconv_to != "UTF-8") {
$decodedStr = iconv("UTF-8", $iconv_to, $decodedStr);
}
return $decodedStr;
}
function code2utf($num){
if($num<128)return chr($num);
if($num<2048)return chr(($num>>6)+192).chr(($num&63)+128);
if($num<65536)return chr(($num>>12)+224).chr((($num>>6)&63)+128).chr(($num&63)+128);
if($num<2097152)return chr(($num>>18)+240).chr((($num>>12)&63)+128).chr((($num>>6)&63)+128) .chr(($num&63)+128);
return '';
}
?>

