Получение данных из тега html

#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 обычно находится в a sup -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;
?>