编码DOMDocument php的错误字符
我有一些html内容,它的所有文本都是波斯文! 我想通过方法DOMDocument :: loadHTML($ html)将这些内容提供给DOMDocument来做一些事情,然后通过DOMDocument :: saveHTML()将其返回......但是在显示字符时存在一个问题:-(例如“سلام”更改为“سٔاÙ...“,即使我将脚本文件编码更改为UTF-8,但它不起作用。
<?php
$html = "<html><meta charset='utf-8' /> سلام</html>";
$doc = new DOMDocument('1.0', 'utf-8');
$doc->loadHTML($html);
print $html; // output : سلام
print $doc->saveHTML(); // output : سلام
print $doc->saveHTML($doc->documentElement); // output : سÙاÙ
?>
更新:根据朋友指令,我使用$ doc-> loadHTML(mb_convert_encoding($ html,'HTML-ENTITIES','UTF-8')); 它的工作!
$html = '<html>سلام</html>';
$doc = new DOMDocument();
将字符串$html
的字符编码转换为UTF-8,然后使用2个libxml
预定义常量( LIBXML_HTML_NOIMPLIED
& LIBXML_HTML_NODEFDTD
)将其加载到DOM。
第一个设置HTML_PARSE_NOIMPLIED flag
,它关闭隐含的html / body ...元素的自动添加(这只是PHP 5.4.0以前的版本)。
第二个设置HTML_PARSE_NODEFDTD
标志,防止在未找到默认文档类型时添加默认文档类型。 使用这些常量可以帮助您以更灵活的方式管理解析。
$doc->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
然后你自己定义DOM编码(前面的定义是用于输入的):
$doc->encoding = 'UTF-8';
如果您没有使用libxml 2.7.7(从PHP> = 5.4.0以上版本),请删除前导和尾部的<html>
& <body>
标签:
$doc->normalizeDocument(); //Remove leading and trailing <html> & <body> tags
print $doc->saveHTML($doc->documentElement);
玩的开心!
告诉XML解析器正在读取的数据是UTF-8编码的:
<?php
// original input (unknown encoding)
$html = '<html>سلام</html>';
$doc = new DOMDocument();
// specify the input encoding
$doc->loadHTML('<?xml encoding="utf-8"?>' . $html);
// specify the output encoding
$doc->encoding = 'utf-8';
// output: <html><body><p>سلام</p></body></html>
print $doc->saveHTML($doc->documentElement);
链接地址: http://www.djcxy.com/p/29851.html