gpt4 book ai didi

php - 为什么 PHP DOMDocument loadHTML 对波斯字符不起作用?

转载 作者:行者123 更新时间:2023-12-03 15:52:47 26 4
gpt4 key购买 nike

Here is my code :

<?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();
正如我在问题标题中提到的,我网站的内容是波斯语(不是英语)。但是代码 about 不适用于波斯字符。
当前输出:
.
.
<p>&#1587;&#1604;&#1575;&#1605;</p>
.
.
预期输出:
.
.
<p>سلام</p>
.
.
它有什么问题,我该如何解决?
注:同样如您所见,我使用过 mb_convert_encoding($data, 'HTML-ENTITIES', 'UTF-8')使其正确(基于 this answer )但仍然不起作用。

最佳答案

波斯字符被编码为数字字符引用。它们会适本地出现在浏览器中,或者您可以通过使用 html_entity_decode() 对它们进行解码来查看原始文件。 ,例如:

echo html_entity_decode("&#1587;&#1604;&#1575;&#1605;");

输出:
سلام

如果您更喜欢输出中的原始字符而不是数字字符引用,您可以更改:
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>

Example.

关于php - 为什么 PHP DOMDocument loadHTML 对波斯字符不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39339582/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com