ufeff quitar caracteres bom php utf-8 byte-order-mark

php - quitar - utf 8 sin bom html



Codificación de una cadena como UTF-8 con BOM en PHP (1)

¿Has intentado añadir uno tú mismo?

El UTF-8 BOM parece ser 0xEF 0xBB 0xBF , por lo que puede adjuntarlo a su cadena después de la conversión a UTF-8.

$utf8_with_bom = chr(239) . chr(187) . chr(191) . $utf8_string;

Cuidado, sin embargo. utf8_encode quiere una cadena ISO-8859-1. Si está trabajando con XML, asegúrese de que el XML no esté ya codificado en UTF-8. Los comentarios en la documentación sugieren que la función se divide en una variedad de formas divertidas, por lo que no debe utilizarla a menos que sepa que la necesita.

Recuerda, las cadenas de PHP son simplemente bytes tontos y desconocidos. No tienen un conjunto de caracteres adjunto, por lo que si los datos de la cadena ya son UTF-8, no es necesario que ejecute la conversión.

Además, el artículo de Wikipedia vinculado dice esto:

Si bien el estándar Unicode permite BOM en UTF-8, no lo requiere ni lo recomienda. El orden de bytes no tiene significado en UTF-8, por lo que una lista de materiales solo sirve para identificar una secuencia de texto o un archivo como UTF-8 o que se convirtió de otro formato que tiene una lista de materiales.

Probablemente no necesite molestarse con el tapdance BOM para empezar.

¿Cómo puedo obligar a PHP a agregar la lista de materiales cuando se utiliza utf8_encode?

Esto es lo que estoy tratando de hacer:

$zip->addFromString($filename, utf8_encode($xml));

Desafortunadamente (para mí), el resultado no tendrá la marca de la lista de materiales al principio.