#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
)
)
)