Crea un fichero UTF-8 al vuelo a partir de otro, con file y fwrite de PHP

Hoy comparto un pequeño truco para generar un archivo de texto en formato UTF-8 a partir de otro dado. Puede ser útil cuando, por ejemplo, tienes que automatizar el proceso de reducir el número de líneas de un archivo, por decir algo; o sea, cuando tienes que coger un archivo UTF-8 que ya tienes en tu sistema de ficheros y montar otro donde pegas algunas de las líneas que contiene el original.

Copiar archivos

Si te encuentras alguna vez con este problema vas a ver que plantea la pequeña complicación de que tú mism@ tienes que preocuparte de generar un nuevo fichero codificado con el juego de caracteres UTF-8.

$lines = file($filename, FILE_IGNORE_NEW_LINES);

$file_handle = fopen($filename, 'wb');

fwrite($file_handle, "\xEF\xBB\xBF");

foreach($lines as $key => $value) {
    fwrite($file_handle, $value . PHP_EOL);
}

fclose($file_handle);

¿Sabías que la representación hexadecimal del BOM para UTF-8 es EF BB BF? Tienes que codificar el BOM, la así llamada marca de orden de bytes, nada más abrir el archivo.