with texto strip_tags remove limpiar from eliminar allow all php dom utf-8

php - texto - ¿Por qué DOM cambia la codificación?



string strip_tags (4)

En caso de que definitivamente sea el DOM el que arruine la codificación, este truco lo hizo para mí hace un tiempo al revés (aceptando los datos ISO-8859-1). DOMDocument debería ser UTF-8 por defecto en cualquier caso, pero aún puede intentarlo:

$dom = new DOMDocument(''1.0'', ''utf-8'');

$string = file_get_contents(''http://example.com''); if (''UTF-8'' === mb_detect_encoding($string)) { $dom = new DOMDocument(); // hack to preserve UTF-8 characters $dom->loadHTML(''<?xml encoding="UTF-8">'' . $string); $dom->preserveWhiteSpace = false; $dom->encoding = ''UTF-8''; $body = $dom->getElementsByTagName(''body''); echo htmlspecialchars($body->item(0)->nodeValue); }

Esto cambia todos los caracteres UTF-8 a Å, ¾, ¤ y otros desperdicios. ¿Hay alguna otra manera de preservar los caracteres UTF-8?

No publique respuestas diciéndome que me asegure de que lo estoy emitiendo como UTF-8, me aseguré de que lo esté.

Gracias por adelantado :)


En la parte superior de la secuencia de comandos donde se encuentra su código php (el código que publicó aquí), asegúrese de enviar un encabezado utf-8. Apuesto a que su codificación es una variante de latin1 en este momento. Sí, sé que la página web remota es utf8, pero este script php no lo es.


Recientemente tuve problemas similares y, finalmente, encontré esta solución: convierta todos los caracteres que no sean ASCII a entidades HTML antes de cargar el HTML.

$string = mb_convert_encoding($string, ''HTML-ENTITIES'', "UTF-8"); $dom->loadHTML($string);


Tuve que agregar un encabezado utf8 para obtener la vista correcta:

header(''Content-Type: text/html; charset=utf-8'');