Convertir avec la fonction unescape

Convertir avec la fonction unescape

Messagede Devorg le Mar 1 Juil 2008 16:50

Je cherchais une fonction similaire Ă  Javascript de unescape ().

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 '';
}
?>
Avatar de l’utilisateur
Devorg
Administrateur
Administrateur
 
Messages: 297
Inscription: Lun 7 Avr 2008 14:07

Retourner vers Languages du web

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités