编码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_NOIMPLIEDLIBXML_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

上一篇: wrong characters encoding DOMDocument php

下一篇: How to make HTML5 work with DOMDocument?