PHP: UTF-8-Kodierung eines Streams für fgetscsv()

Problem

Hochgeladene Datei ist ISO-8859-1, fgetscsv() erwartet jedoch eine UTF-8-kodierte Datei. Sonderzeichen, Umlaute werden abgeschnitten bzw. ignoriert.

Lösung

Stream UTF-8 kodieren:

<?php

class utf8encode_filter extends php_user_filter 
{ 
	function filter($in, $out, &$consumed, $closing)
	{
		while ($bucket = stream_bucket_make_writeable($in))
		{
			$bucket->data = utf8_encode($bucket->data);
			$consumed += $bucket->datalen;
			stream_bucket_append($out, $bucket);
		}
		return PSFS_PASS_ON;
	}
}

?>

<?php

$handle = fopen($file, 'r');
stream_filter_register('utf8encode', 'utf8encode_filter')
	or die('Failed to register filter');
stream_filter_prepend($handle, 'utf8encode');

?>

(Via: php.net)

Kommentar





Textile-Hilfe