Как удалить все теги из поста Wordpress, кроме дочернего тега, используя DOM - PullRequest
0 голосов
/ 04 сентября 2011

Я пытаюсь удалить все из следующей строки за исключением тега объекта:

<p>If a post is marked video, and there is text BEFORE the video, the video player does not appear! We only see the actual text for the url…</p>
<p>&nbsp;</p>
<p><object width="584" height="463"><param value="http://www.youtube.com/v/Clp9AeBdgL0?version=3" name="movie"><param value="true" name="allowFullScreen"><param value="always" name="allowscriptaccess"><embed width="584" height="463" allowfullscreen="true" allowscriptaccess="always" type="application/x-shockwave-flash" src="http://www.youtube.com/v/Clp9AeBdgL0?version=3"></object></p>
<p>Of course, you might even have a paragraph AFTER the video. Could be lots and lots of meaningless text &ndash; we should definitely limit this. Lorem ipsum</p>

Как вы можете видеть выше, третий тег 'p' содержит тег 'object'.Я хочу избавиться от всего, кроме тега 'object' и его содержимого.Другими словами, я хотел бы пройти DOM и удалить все, кроме:

<object width="584" height="463"><param value="http://www.youtube.com/v/Clp9AeBdgL0?version=3" name="movie"><param value="true" name="allowFullScreen"><param value="always" name="allowscriptaccess"><embed width="584" height="463" allowfullscreen="true" allowscriptaccess="always" type="application/x-shockwave-flash" src="http://www.youtube.com/v/Clp9AeBdgL0?version=3"></object>

Я смог написать функцию, которая удаляла какой-либо конкретный тег (p, img, div и т. Д.) И его содержимое.из строки, проходя через DOM, но я НЕ смог понять, как сохранить содержимое дочернего тега, как в этом случае.Кто-нибудь может помочь?

1 Ответ

1 голос
/ 04 сентября 2011

Вместо того, чтобы обходить DOM с анализируемым XML-объектом (что звучит так, как будто вы делаете, извините, если я ошибаюсь), я бы предложил просто использовать поиск по типу регулярных выражений в вашей строке.

PHP поддерживает PCRE

EDIT: Похоже, '/<object .*<\/object>/' работает. Вы можете проверить регулярное выражение PHP здесь - я использовал функцию preg_match(). Кроме того, если у вас есть несколько <object> с на страницу, вы должны убедиться, что вы не используете "жадное" сопоставление. Наконец, этот не будет работать с вложенными объектами, хотя я не ожидаю, что они у вас будут.

Таким образом, весь фрагмент может быть:

$pattern = '/<object .*<\/object>/';
$subject = /* this is your string containing the html' */
$matches = array();

if(preg_match($pattern, $subject, $matches))
{
    echo $matches[0];
}
else
{
    echo "No match found."
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...