要求是在页面上的所有英语单词周围添加一个englishText类。问题类似于this,但Javascript解决方案对我不起作用。我需要一个PHP示例来解决此问题。例如,如果你有这个:
<p>Hello, 你好</p>
<div>It is me, 你好</div>
<strong>你好, how are you</strong>
之后我需要结束:
<p><span class="englishText">Hello</span>, 你好</p>
<div><span class="englishText">It is me</span>, 你好</div>
<strong>你好, <span class="englishText">how are you</span></strong>
还有更复杂的案例,例如:
<strong>你好, TEXT?</strong>
<div>It is me, 你好</div>
这应该成为:
<strong>你好, <span class="englishText">TEXT?</span></strong>
<div><span class="englishText">It is me</span>, 你好</div>
但是一旦我知道如何正确地迭代文档,我想我可以理清这些边缘情况。
我无法使用javascript解决此问题,因为:
我认为迭代文档的最佳方法是使用PHP Simple HTML DOM Parser。
但问题是如果我试试这个:
foreach ($html->find('div') as $element)
{
// make changes here
}
我担心以下情况会引起混乱:
<div>
Hello , 你好
<div>Hello, 你好</div>
</div>
正如您所看到的,它将进入第一个div,然后如果我处理该节点,我也将在其中处理该节点。
任何想法如何解决这个问题,只选择一次处理节点?
更新
我现在意识到我真正需要的是一种递归方式来迭代HTML元素,并能够在迭代它们时更改它们。
答案 0 :(得分:0)
你应该以{{1}}的方式旅行,这样你就不会遇到这样的情况......
类似的东西:
siblings
或者更轻松的方式imo:
只是......
<?php
foreach ($html->find('div') as $element)
{
foreach($element->next_sibling() as $sibling){
echo $sibling->plaintext()."\n";
}
}
?>
; <*>
更改为"\n"."<*>"
preg_replace()
3
$lines = explode("\n",$html_string);