Dom文档和特殊字符

2022-08-30 13:31:52

这是我的代码:

$oDom = new DOMDocument();
$oDom->loadHTML("èàéìòù");
echo $oDom->saveHTML();

这是输出:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>&Atilde;&uml;&Atilde;&nbsp;&Atilde;&copy;&Atilde;&not;&Atilde;&sup2;&Atilde;&sup1;</p></body></html>

我想要这个输出:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>èàéìòù</p></body></html>

我试过...

$oDom = new DomDocument('4.0', 'UTF-8');

或者使用1.0和其他东西,但什么都没有。

另一件事...有一种方法可以获得相同的未触及的HTML?例如,在输入中使用此 html 时,仅使用 DOMDocument 获取相同的输出,仅用于解析 DOM 并在标记内执行一些替换。<p>hello!</p><p>hello!</p>


答案 1

溶液:

$oDom = new DOMDocument();
$oDom->encoding = 'utf-8';
$oDom->loadHTML( utf8_decode( $sString ) ); // important!

$sHtml = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
$sHtml .= $oDom->saveHTML( $oDom->documentElement ); // important!

该方法的工作方式与指定节点的方式不同。您可以使用主节点 () 手动添加所需的内容。另一件重要的事情是。在我的情况下,类的所有属性和其他方法都不会产生所需的结果。saveHTML()$oDom->documentElement!DOCTYPEutf8_decode()DOMDocument


答案 2

尝试在加载 HTML 设置编码类型。

$dom = new DOMDocument();
$dom->loadHTML($data);
$dom->encoding = 'utf-8';
echo $dom->saveHTML();

其他方式


推荐