Как удалить HTML часть текста в PHP - PullRequest
2 голосов
/ 30 июня 2011

У меня есть вопрос о разборе текста и удалении ненужных частей HTML.Я знаю такие функции, как - strip_tags (), которая удалит все теги, но проблема в том, что эта функция оставляет там «внутренний текст».

Позвольте показать вам пример, у нас есть текст:1003 *

Hello, how are you? <a href="">Link to my website</a> __Here continues html tags, links, images__

Я хочу удалить всю часть, где находится html.Не только теги, но и текст (например, «Ссылка на мой сайт» выше).

Есть ли эффективный способ, функция, которую я пропустил?

Ответы [ 7 ]

3 голосов
/ 30 июня 2011

Попробуйте это:

function removeTags($str) {
    $result = '';

    $xpath = new DOMXPath(DOMDocument::loadHTML(sprintf('<body>%s</body>', $str)));
    foreach ($xpath->query('//body/text()') as $textNode) {
        $result .= $textNode->nodeValue;
    }

    return $result;
}

echo removeTags(
    'Hello, how are you? <a href="">Link to my website</a> __Here continues html <span>tags</span>, links, images__'
);

Вывод:

Hello, how are you? __Here continues html , links, images__
1 голос
/ 30 июня 2011

Почему бы не сделать правилом, что входные данные для отправки не могут содержать теги.

function containsIllegalHtml($input, $allowable_tags = '') {
    if($input != strip_tags($input, $allowable_tags)) {
        return true;
    } else {
        return false;
    }
}

Используйте эту функцию, чтобы проверить, содержит ли вход теги или нет.

0 голосов
/ 30 июня 2011

Может быть, это будет работать:

http://htmlpurifier.org/

Вот учебник

http://www.zendcasts.com/writing-custom-zend-filters-with-htmlpurifier/2011/06/

это для Zend Framework, но я думаю, что это может помочь

0 голосов
/ 30 июня 2011

Немного прег магии?

$text = preg_replace('/<[\/\!]*?[^<>]*?>/si', '', $text);
0 голосов
/ 30 июня 2011

Я искал и нашел это решение

$txt = "
<html>
<head><title>Something wicked this way comes</title></head>
<body>
This is the interesting stuff I want to extract
</body>
</html>";

$text = preg_replace("/<([^<>]*)>/", "", $txt);

echo htmlentities($text);
0 голосов
/ 30 июня 2011

возможно это не правильно, но ...

$str = 'Hello, how are you? <a href="">Link to my website</a> __Here continues html tags, links, ';
$rez = preg_replace("/\<.*\>/i",'',$str);
var_dump($rez);

дал мне вывод

string 'Hello, how are you?  __Here continues html tags, links, ' (length=56)
0 голосов
/ 30 июня 2011

вы можете написать функцию, которая принимает строку и он использует возможности строки php, чтобы получить позицию «<», а затем позицию «>» и убрать их из входной строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...