#php #html #simple-html-dom
#php #HTML #простой-html-dom
Вопрос:
Я хочу получить данные в <b>
теге, например :
<b>
<sup>1</sup>A, a
</b>
<b> ab </b>
<b><sup>2</sup>A</b>
Я хочу получить A,a
ab
и A
из тега выше.
но иногда <sup>
в строке данных нет тега, как показано ниже :
<b>ab</b>
но я хочу получить данные ab
Я пытаюсь сосредоточиться на <b>
теге :
foreach($html->find('b') as $word) {
$words = $word->innertext;
echo $words.'<br>';}
Но когда есть <sup>
тег, текст во внутреннем <sup>
теге тоже будет напечатан. Как не получить данные внутри <sup>
тега? Спасибо
Комментарии:
1. Если нет sup-тега, вы не получаете данные изнутри sup-тега. Если я правильно понимаю ваш вопрос, вы пытаетесь сделать то, что логически невозможно. Если только нет какой-то разницы между
a
иb
, которую вы не указали в своем вопросе.2. Откуда вы знаете, какая часть
ab
обычно находится в asup
-Tag?3. Вы хотите получить A,a,ab???
4. @Salim да, я хочу получить A, a и ab
Ответ №1:
Вы можете получить текст внутри родительского элемента, т.Е. <b></b>
и игнорировать <sup></sup>
или любой другой элемент внутри него, используя метод clone() .
$('b')
.clone() //clone the element
.children() //select all childrens
.remove() //remove all the children
.end() //return to the matched element
.text(); //get the text
Ответ №2:
Попробуйте:
<?php
$html = "<b>
<sup>1</sup>A, a
</b>
<b> ab </b>
<b><sup>2</sup>A</b>";
//remove all html tags without <sup>
$html = strip_tags($html,"<sup>");
//remove <sup> tag with its content
$html = preg_replace('#<sup>[{w},sd"] </sup>#', "", $html);
//remove t, n and r (tabs, newline etc)
$html = str_replace(array("t","n","r"),"",$html);
//also you can remove space from string
$html = str_replace(" ","",$html);
echo $html;
?>