Mi rispondo da solo dopo un lungo studio del protocollo http sperando di essere utile a qualcuno che si ritrovo lo stesso problema.
I caratteri strani non sono altro che il numero dei caratteri successivi nel caso si tratti di una risposta
che ha nell'header
Codice PHP:
Transfer-Encoding: chunked
Per decodificarla bisogna leggere la prima linea trasformare il codice esadecimale in intero leggere
il numero di caratteri successivi metterli nella risposta poi aspettarti un altra linea che identifica i caratteri successivi e cosi via fino a quando il numero di caratteri successivi diventa 0.
Ho analizzato lo Zend Framework per vedere come faceva ecco il metodo
Codice PHP:
/**
* @category Zend
* @package Zend_Http
* @subpackage Response
* @version $Id: Response.php 8064 2008-02-16 10:58:39Z thomas $
* @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. ([url]http://www.zend.com[/url])
* @license [url]http://framework.zend.com/license/new-bsd[/url] New BSD License
**/
/**
* Decode a "chunked" transfer-encoded body and return the decoded text
*
* @param string $body
* @return string
*/
public static function decodeChunkedBody($body)
{
$decBody = '';
while (trim($body)) {
if (! preg_match("/^([\da-fA-F]+)[^\r\n]*\r\n/sm", $body, $m)) {
require_once 'Zend/Http/Exception.php';
throw new Zend_Http_Exception("Error parsing body - doesn't seem to be a chunked message");
}
$length = hexdec(trim($m[1]));
$cut = strlen($m[0]);
$decBody .= substr($body, $cut, $length);
$body = substr($body, $cut + $length + 2);
}
return $decBody;
}
comunque senza stare troppo a sbattersi si può utilizzare questa classe che può essere istanziata
passandogli la stringa in blocco della risposta http .