$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);
}
这会将所有UTF-8字符更改为Å,¾,¤和其他垃圾。有没有其他方法可以保存UTF-8字符?
不要发布答案告诉我确保我输出为UTF-8,我确定是。
提前致谢:)
答案 0 :(得分:40)
我最近遇到过类似的问题,并最终找到了解决方法 - 在加载html之前将所有非ascii字符转换为html实体
$string = mb_convert_encoding($string, 'HTML-ENTITIES', "UTF-8");
$dom->loadHTML($string);
答案 1 :(得分:4)
如果肯定是DOM搞砸了编码,这个技巧对我来说反过来了一段时间(接受ISO-8859-1数据)。默认情况下,DOMDocument 默认为UTF-8,但你仍然可以尝试:
$dom = new DOMDocument('1.0', 'utf-8');
答案 2 :(得分:1)
在PHP代码所在的脚本顶部(您在此处发布的代码),请确保发送utf-8标头。我打赌你的编码是latin1的一些变种。是的,我知道远程网页是utf8,但这个PHP脚本不是。
答案 3 :(得分:1)
我必须添加一个utf8标头才能获得正确的视图:
header('Content-Type: text/html; charset=utf-8');