guzzle-transcoder
, (*1)
This package provides a Guzzle 6/7 middleware that transparently converts documents obtained by Guzzle from its native encoding to UTF-8 (or any other specified encoding). It supports the following features:, (*2)
- Detection of charset from [
Content-Type] HTTP header.
- Detection of charset from [
meta element] in HTML document.
- Detection of charset from XML declaration in RSS and other XML documents.
- Updating the
Content-Type header in the Response object according to target encoding.
- Updating the metadata in the
Response body according to target encoding (not enabled by default).
Installation
It is recommended to install the library using Composer:, (*3)
composer require fossar/guzzle-transcoder
Usage
Basic example
, (*4)
use Fossar\GuzzleTranscoder\GuzzleTranscoder;
use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
$stack = HandlerStack::create();
$stack->push(new GuzzleTranscoder);
$client = new Client(['handler' => $stack]);
$url = 'https://www.myseosolution.de/scripts/encoding-test.php?enc=iso'; // request website with iso-8859-1 encoding
$req = $client->get($url);
echo $req->getBody();
Full example
, (*5)
use Fossar\GuzzleTranscoder\GuzzleTranscoder;
use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
$stack = HandlerStack::create();
$stack->push(new GuzzleTranscoder([
'targetEncoding' => 'windows-1252',
// Swap the default settings:
'replaceHeaders' => false,
'replaceContent' => true,
]));
$client = new Client(['handler' => $stack]);
$url = 'https://www.myseosolution.de/scripts/encoding-test.php?enc=iso'; // request website with iso-8859-1 encoding
$req = $client->get($url);
echo $req->getHeaderLine('Content-Type') . "\n"; // HTTP header will remain unchanged
echo $req->getBody();
Credits
It is largely based on Pascal Landauâs guzzle-auto-charset-encoding-subscriber and web-utility libraries., (*6)
We are using Transcoder library. This allows us to fall back to iconv when mbstring is not available or an encoding is not supported by it., (*7)
The source code is available under the terms of MIT license, (*8)