downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

http_deflate> <http_cache_last_modified
Last updated: Fri, 14 Aug 2009

view this page in

http_chunked_decode

(PECL pecl_http >= 0.1.0)

http_chunked_decodeDécode un fragment de donnée encodé

Description

string http_chunked_decode ( string $encoded )

Décode un fragment de chaîne encodée.

Liste de paramètres

encoded

Fragment de chaîne encodée

Valeurs de retour

Retourne la chaîne décodée en cas de succès, ou FALSE si une erreur survient.

Exemples

Exemple #1 Exemple avec http_chunked_decode()

<?php
$string 
"".
    
"05\r\n".
    
"this \r\n".
    
"07\r\n".
    
"string \r\n".
    
"12\r\n".
    
"is chunked encoded\r\n".
    
"01\n\r\n".
    
"00";
echo 
http_chunked_decode($string);
?>

L'exemple ci-dessus va afficher :

this string is chunked encoded



add a note add a note User Contributed Notes
http_chunked_decode
Marques Johansson
23-Mar-2009 04:48
Here's a PHP implementation for those less interested in installing a pecl module.  It's a bit naive (doesn't handle multiple byte encodings), but it works.  I'm also including my is_hex() implementation at no additional cost.

<?php
if (!function_exists('http-chunked-decode')) {
   
/**
     * dechunk an http 'transfer-encoding: chunked' message
     *
     * @param string $chunk the encoded message
     * @return string the decoded message.  If $chunk wasn't encoded properly it will be returned unmodified.
     */
   
function http_chunked_decode($chunk) {
       
$pos = 0;
       
$len = strlen($chunk);
       
$dechunk = null;

        while((
$pos < $len)
            && (
$chunkLenHex = substr($chunk,$pos, ($newlineAt = strpos($chunk,"\n",$pos+1))-$pos)))
        {
            if (!
is_hex($chunkLenHex)) {
               
trigger_error('Value is not properly chunk encoded', E_USER_WARNING);
                return
$chunk;
            }

           
$pos = $newlineAt + 1;
           
$chunkLen = hexdec(rtrim($chunkLenHex,"\r\n"));
           
$dechunk .= substr($chunk, $pos, $chunkLen);
           
$pos = strpos($chunk, "\n", $pos + $chunkLen) + 1;
        }
        return
$dechunk;
    }
}

   
/**
     * determine if a string can represent a number in hexadecimal
     *
     * @param string $hex
     * @return boolean true if the string is a hex, otherwise false
     */
   
function is_hex($hex) {
       
// regex is for weenies
       
$hex = strtolower(trim(ltrim($hex,"0")));
        if (empty(
$hex)) { $hex = 0; };
       
$dec = hexdec($hex);
        return (
$hex == dechex($dec));
    }
?>

http_deflate> <http_cache_last_modified
Last updated: Fri, 14 Aug 2009
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites