Найти фразы / слова между HTML, используя PHP - PullRequest
1 голос
/ 10 сентября 2009

Мне было интересно найти надежный способ найти фразы / слова, которые являются частью HTML-документа. Например, если у меня есть следующий документ:

<a href="#">This is a test</a><b>Another test</b>

Моя цель - найти «Это тест» и «Другой тест» и заменить его чем-то другим. Обратите внимание, что это примеры фраз, и они могут содержать цифры или символ амперсанда.

Любая помощь будет отличной.

Спасибо

Ответы [ 6 ]

2 голосов
/ 10 сентября 2009

Рассматривайте ваш HTML как XML и используйте расширение DOM (PHP 5) или DOM XML (PHP 4) (или любое другое расширение XML, включенное в PHP).

Для каждого узла вы можете получить внутренний текст, используя DomNode.GetValue (в зависимости от используемой вами библиотеки).

0 голосов
/ 10 сентября 2009

Ключевым моментом здесь является использование регулярного выражения, в некотором смысле, для синтаксического анализа HTML ...

Итак, вы бы использовали:

<?php

$str = "<a href =\"\">Hello</a>"; //The string to search

preg_match('/(<.+>)??.+(<\/.+>)??/i',$str,$match); //Find all occurences and store the tag content in an array called $match

echo $match[0]; //Echo the first value

?>

Это в основном выполняет поиск входной строки (которую вы задали бы в качестве HTML своей страницы) и возвращает каждое совпадение текста между тегами в качестве значения в массиве. Для первого тега значение будет сохранено в $ match [0], второе в $ match [1] и т. Д.

Он делает это, сначала находя шаблон, который начинается с тега HTML и заканчивается тегом HTML, но не выбирает ни один тег, оставляя выбранным только содержимое.

Надеюсь, это поможет!

Braeden

0 голосов
/ 10 сентября 2009

Если это вариант для клиентской стороны, я бы предложил jQuery replaceWith ()

0 голосов
/ 10 сентября 2009

Здесь объясняется, как удалить все html-файлы (html-теги, сценарии, css), а затем с помощью str_replace вы можете заменить все, что захотите.

0 голосов
/ 10 сентября 2009

Я бы посмотрел что-то вроде str_replace ()

0 голосов
/ 10 сентября 2009

Вы можете использовать php's strip_tags($string, $tagsToRemove)

$justText = strip_tags('<a href="#">This is a test</a><b>Another test</b>');

И тогда у вас будет текст, чтобы вы могли использовать str_replace("new text", $justText);

Возможно, вам придется разбить его, используя второй параметр strip_tags(), чтобы сохранить теги отдельно.

$html = '<a href="#">This is a test</a><b>Another test</b>';
$anchorText = strip_tags($html, '<a>');
$paraText = strip_tags($html, '<p>');
$html = str_replace("new anchor text", $anchorText);
$html = str_replace("new paragraph text", $paraText);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...