Поиск всех слов (или предложений) из html

#php #simple-html-dom

#php #простой-html-dom

Вопрос:

Я пытаюсь найти все слова в блоке html. Читая руководство, я подумал, что это возможно с помощью find('text') функции. Хотя я не могу заставить это что-либо возвращать.

Кто-нибудь может сказать мне, что я делаю не так?

 require_once __DIR__ . '/simple_html_dom.php';

$html = str_get_html("<html><body><div><p><span>Hello to the <b>World</b></span></p><p> again</p></div></body></html>");

foreach($html->find('text') as $element) {
    echo $element->plaintext . '<br>';
}
  

В конечном итоге я пытаюсь найти все тексты и их начальную позицию в html. Для этого конкретного примера это будет выглядеть следующим образом:

 [
    0 => [
        'word' => 'Hello to the ',
        'pos' => 27
    ],
    1 => [
        'word' => 'World',
        'pos' => 43
    ],
    2 => [
        'word' => ' again',
        'pos' => 66
    ]
]
  

Итак, может кто-нибудь объяснить мне, что я делаю не так с простым HTML Dom, и помочь мне определить начальную позицию каждого слова? Или скажите мне о другом инструменте, который я должен использовать?

Комментарии:

1. Я полагаю, что параметр, передаваемый команде find, является именем элемента HTML. Эта библиотека очень старая и устаревшая. Вам было бы намного лучше использовать встроенные методы PHP, хотя вам будет довольно сложно получить позиции символов.

2. Мне удалось получить элементы с помощью find (‘p’) или find (‘span’), но не с помощью find text.

3. Вы можете попробовать одну из старых версий и посмотреть, нет ли ошибки в новой, и / или открыть отчет об ошибке.

Ответ №1:

Вы можете использовать доступную функцию strip_tag , preg_match_all чтобы извлечь позицию каждого слова

 $str = "<html><body><div><p><span>Hello to the <b>World</b></span></p><p> again</p></div></body></html>";
$find =  '/'.str_replace(' ','|',strip_tags($str)).'/';
preg_match_all($find, strip_tags($str), $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
  

Результат :-

  Array
(
[0] => Array
    (
        [0] => Array
            (
                [0] => Hello
                [1] => 0
            )

        [1] => Array
            (
                [0] => to
                [1] => 6
            )

        [2] => Array
            (
                [0] => the
                [1] => 9
            )

        [3] => Array
            (
                [0] => World
                [1] => 13
            )

        [4] => Array
            (
                [0] => again
                [1] => 19
            )

    )

)