PHP DOMDocument无法正确渲染Unicode字符

11

我正在使用CKEditor让用户发表评论,用户还可以在评论框中输入Unicode字符。

当我提交表单并检查$_POST ["reply"]时,Unicode字符显示得非常好。我还在页面顶部使用了header('Content-type:text / html; charset = utf-8'); 但是,当我使用PHP DOMDocument处理它时,所有字符都变得无法阅读。

$html_unicode = "xyz unicode data";
$html_data = '<body>'.$html_unicode . '</body>';
$dom = new DOMDocument();
$dom->loadHTML($html_data );

$elements = $dom->getElementsByTagName('body');

当我回显时

echo $dom->textContent;

输出结果变为

§Ø³ÙبÙÙ ÙÙÚº غرÙب ک٠آÙÛ ÙÛÙ

如何使用PHP DOMDocument获取正确的Unicode字符。

4个回答

23

这对我起了作用:

$html_unicode = "xyz unicode data";
$html_data = '<body>'.$html_unicode . '</body>';

$dom = new DOMDocument();
$html_data  = mb_convert_encoding($html_data , 'HTML-ENTITIES', 'UTF-8'); // require mb_string
$dom->loadHTML($html_data);

$elements = $dom->getElementsByTagName('body');

1
或者更简短地说,只需 $dom->loadHTML('<?xml encoding="UTF-8">' . $html_data); - Sygmoral

7
尝试这个 :)
<?php
    $html_unicode = "xyz unicode data";
    $html_data = '<body>'.$html_unicode . '</body>';
    $dom = new DOMDocument();
    $dom->loadHTML($html_data );

    $elements = $dom->getElementsByTagName('body');
    echo utf8_decode($dom->textContent);
?>

那只适用于ISO-8859-1字符集中的字符。OP正在使用阿拉伯语。 - Esailija
将使用UTF-8编码的ISO-8859-1字符的字符串转换为单字节ISO-8859-1。ISO-8859-1不包含阿拉伯字符。 - Esailija

1
这适用于阿拉伯语。
<?php
echo "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=Windows-1256\"></head><body>";
$html = file_get_contents("    url    ");
$dom = new DOMDocument();
@$dom->loadHTML($html);
$ExTEXT = $dom->getElementById('tag id');
echo utf8_decode($ExTEXT->textContent);
echo "</body></html>";

1
感谢上帝,我只需替换

就找到了解决方案。
$html_data = '<body>'.$html_unicode . '</body>';

带有。
$html_data = '<head><meta http-equiv="Content-Type" 
content="text/html; charset=utf-8">
</head><body>' . $html_unicode . '</body>';

这个对我有用。我刚刚做了这个: $content = str_replace('</head>', '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head>', $content); - Mahmood

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接