encode-file
Encode a file., (*1)
use Jstewmc\EncodeFile\Encode;
// set the filename
$filename = '/path/to/foo.txt';
// create an ASCII encoded string
$contents = mb_convert_encoding('foo', 'ASCII');
// put the contents into the file
file_put_contents($filename, $contents);
// is the file UTF-32 encoded?
mb_check_encoding(file_get_contents($filename), 'UTF-32'); // returns false
// create the service
// keep in mind, you'll need to implement the Read and Write interfaces
//
$service = new Encode(new Read(), new Write());
// convert the file to UTF-32
$service($filename, 'UTF-32');
// is the file UTF-32 encoded?
mb_check_encoding(file_get_contents($filename), 'UTF-32'); // returns true
PHP Extensions
This library requires PHP's non-default mbstring extension. If the service is instantiated without the mbstring extension loaded, a BadMethodCallException will be thrown., (*2)
Dependencies
This library depends on (and provides) two interfaces for a read-file service and a write-file service. The former must implement a __invoke(string $filename): string method, and the latter must implement a __invoke(string $filename, string $contents): int method., (*3)
The read-file and write-file interfaces MAY be implemented by the jstewmc/read-file and jstewmc/write-file libraries, respectively. For example, in your application, extend Jstewmc\ReadFile\Read and implement Jstewmc\EncodeFile\Read:, (*4)
namespace My\App;
use Jstewmc\EncodeFile\Read as ReadInterface;
use Jstewmc\ReadFile\Read as ReadParent;
class Read extends ReadParent implements ReadInterface
{
// nothing yet
}
From encoding
Keep in mind, it's difficult to detect a string's character encoding. Even PHP's mb_detect_encoding() function is not perfect. For example, mb_detect_encoding() will almost never detect Windows-1252 encoding, even if the string actually is Windows-1252 encoded (see Bug #64667 for details)., (*5)
To prevent erroneously detecting the file's from encoding, you MAY include it as the service's third argument. If the "from" encoding is not given, the library will attempt to detect it., (*6)
use Jstewmc\EncodeFile\Encode;
$service = new Encode(new Read(), new Write());
// encode file as UTF-8 from Windows-1252
$service('/path/to/file.txt', 'UTF-8', 'Windows-1252');
Author
Jack Clayton, (*7)
License
MIT, (*8)
Version
0.3.0, September 6, 2016
0.2.0, August 31, 2016
0.1.0, August 27, 2016