<?php
$data = <<<DATA
<div>
<p>سلام</p> // focus on this line
<p class="myclass">Remove this one</p>
<p>But keep this</p>
<div style="color: red">and this</div>
<div style="color: red">and <p>also</p> this</div>
<div style="color: red">and this <div style="color: red">too</div></div>
</div>
DATA;
$dom = new DOMDocument();
$dom->loadHTML(mb_convert_encoding($data, 'HTML-ENTITIES', 'UTF-8'), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($dom);
foreach ($xpath->query("//*[@*]") as $node) {
$parent = $node->parentNode;
while ($node->hasChildNodes()) {
$parent->insertBefore($node->lastChild, $node->nextSibling);
}
$parent->removeChild($node);
}
echo $dom->saveHTML();正如我在问题标题中提到的,我的网站内容是波斯语(不是英语)。但是密码对波斯人不起作用。
电流输出:
.
.
<p>سلام</p>
.
.预期输出:
.
.
<p>سلام</p>
.
.它有什么问题,我怎么能修好它?
注意:正如您所看到的,也使用了mb_convert_encoding($data, 'HTML-ENTITIES', 'UTF-8')来使其正确(基于https://stackoverflow.com/questions/8218230/php-domdocument-loadhtml-not-encoding-utf-8-correctly#8218649),但仍然不起作用。
发布于 2016-09-06 02:19:15
波斯字符被编码为数字字符引用。它们将在浏览器中适当地出现,或者您可以通过使用html_entity_decode()解码它们来查看原始文件,例如:
echo html_entity_decode("سلام");产出:
سلام如果您喜欢输出中的原始字符而不是数字字符引用,则可以更改:
echo $dom->saveHTML();至:
echo $dom->saveHTML($dom->documentElement);这稍微改变了序列化,结果是:
<div>
<p>سلام</p>
Remove this one
<p>But keep this</p>
and this
and <p>also</p> this
and this too
</div>https://stackoverflow.com/questions/39339582
复制相似问题