begin process at 2012 05 27 18:13:30
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > QUOTED-PRINTABLE (ENCODE / DECODE)

QUOTED-PRINTABLE (ENCODE / DECODE)


 Information sur la source

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths & Algorithmes Niveau :Expert Date de création :12/04/2003 Date de mise à jour :12/04/2003 01:28:06 Vu :12 633

Auteur : matpat

Ecrire un message privé
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

 Description

Pour encoder ou décoder facilement un texte en 'quoted-printable' (format fréquemment utilisé dans le corp des mail ou posts de newsgroup) , il faut avoir la librairie imap d'installé, ...

voilà deux fonctions qui permettent d'obtenir le même resultat ( conforme au RFC 2045 - http://rfc.net/rfc2045.html )

Source

  • function QPencode($str)
  • {
  • DEFINE('CRLF', "\r\n");
  • $lines = preg_split("/\r?\n/", $str);
  • $out = '';
  • foreach ($lines as $line)
  • {
  • $newpara = '';
  • for ($j = 0; $j <= strlen($line) - 1; $j++)
  • {
  • $char = substr ( $line, $j, 1 );
  • $ascii = ord ( $char );
  • if ( $ascii < 32 || $ascii == 61 || $ascii > 126 )
  • {
  • $char = '=' . strtoupper ( dechex( $ascii ) );
  • }
  • if ( ( strlen ( $newpara ) + strlen ( $char ) ) >= 76 )
  • {
  • $out .= $newpara . '=' . CRLF; $newpara = '';
  • }
  • $newpara .= $char;
  • }
  • $out .= $newpara . $char;
  • }
  • return trim ( $out );
  • }
  • function QPdecode( $str )
  • {
  • $out = preg_replace('/=\r?\n/', '', $str);
  • $out = preg_replace('/=([A-F0-9]{2})/e', chr( hexdec ('\\1' ) ), $out);
  • return trim($out);
  • }
  • ?>
function QPencode($str)
{
    DEFINE('CRLF', "\r\n");
    
    $lines = preg_split("/\r?\n/", $str);
    $out   = '';
    
    foreach ($lines as $line)
    {
        $newpara = '';
    	
        for ($j = 0; $j <= strlen($line) - 1; $j++)
        {
            $char = substr ( $line, $j, 1 );
            $ascii = ord ( $char );	
            
            if ( $ascii < 32 || $ascii == 61 || $ascii > 126 ) 
            {
                 $char = '=' . strtoupper ( dechex( $ascii ) );
            }
            
            if ( ( strlen ( $newpara ) + strlen ( $char ) ) >= 76 ) 
            {
            	$out .= $newpara . '=' . CRLF;   $newpara = '';
            }
            $newpara .= $char;
        }
        $out .= $newpara . $char;
    }
    return trim ( $out );	
}

function QPdecode( $str )
{
    $out = preg_replace('/=\r?\n/', '', $str);
    $out = preg_replace('/=([A-F0-9]{2})/e', chr( hexdec ('\\1' ) ), $out);
    
    return trim($out);
}

?>

 Conclusion

utilisation :

QPencode('texte');
QPdecode('texte');

voilou, en espérant que ce code va vous servir ;)


 Sources du même auteur

QUERY STRING : MODIFICATIONS DES CARACTÈRES.

 Sources de la même categorie

EXEMPLE D'APPLICATION DE L'ALGORITHME DE DIJKSTRA EN PHP par philtr8
CLEF POUR EAN 13 ET 14 par RaftY
FONCTION DE CALCUL DU NOMBRE DE DUEL UNIQUE POUR UN NOMBRE N... par mtrix000
Source avec Zip Source avec une capture TRIANGLE DE PASCAL ET SON ÉQUATION par vendeeHdLR89
Source avec Zip CONVERTISSEUR LAMBERT2 ÉTENDU EN COORDONNÉE GÉOGRAPHIQUE (LO... par varfendell

Commentaires et avis

Commentaire de MangaII le 14/12/2007 12:28:33 8/10

Très pratique lorsque l'on a pas les fonctions imap_8bit dispos sur le serveur.

3 petites modifs tout de même :

l'expression régulière de séparation des lignes, ne prend pas de ?, et il faudrait envisager les encodages unix et mac (\n ou \r) mais ceci n'importe peu dans l'encodage. au pire, on perd les saut de lignes.

  $char = '=' . strtoupper ( dechex( $ascii ) );
devient
  $char = '=' . strtoupper ( sprintf("%02X", $ascii ) );

pour éviter les soucis d'encodage avec des tabulations et retour à la ligne ( ex code ascii 9 => =09 ) dans l'ancienne version, il ne mettait pas le 0 devant, ce qui générait des problèmes.

et enlever le $char sur la ligne
  $out .= $newpara . $char;
ce qui avait pour effet de doubler le dernier caractère de la ligne ...

Nouvelle version complète:

function QPencode($str)
{
DEFINE('CRLF', "\r\n");
$lines = preg_split("/\r\n/", $str);
$out = '';

foreach ($lines as $line)
{
$newpara = '';

for ($j = 0; $j <= strlen($line) - 1; $j++)
{
$char = substr ( $line, $j, 1 );
$ascii = ord ( $char );


if ( $ascii < 32 || $ascii == 61 || $ascii > 126 )
$char = '=' . strtoupper ( sprintf("%02X", $ascii ) );

if ( ( strlen ( $newpara ) + strlen ( $char ) ) >= 76 )
{
$out .= $newpara . '=' . CRLF;
$newpara = '';
}
$newpara .= $char;
}
$out .= $newpara;
}
return trim ( $out );
}

Commentaire de MangaII le 14/12/2007 14:21:36

Encore une petite modif :
L'utilisation du DEFINE au début génère un Warning, si on appele plusieurs fois la fonction au sein d'un script.

On peut supprimer la ligne (DEFINE) et utiliser directement :

  $out .= $newpara . "=\r\n";

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,562 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales