Удалить HTML с помощью PHP (ob_start + dom parser) - PullRequest
2 голосов
/ 10 апреля 2011

Мне нужно научиться удалять html-теги с помощью PHP.

Это то, что я имею в виду (я думаю, что DOM-фраза - это то, что мне нужно, но я не могу понять, как это работает. Рабочий примербыть большой помощью для меня. Я не могу установить никакую внешнюю библиотеку, и я использую PHP 5):

function the_remove_function($remove){

//  dom parser code here?

return $remove;}

// return all content into a string
ob_start('the_remove_function');

Пример кода:

<body>
<div class="a"></div>
<div id="b"><p class="c">Here are some text and HTML</p></div>
<div id="d"></div>
</body>

Вопросы:

1) Как мне вернуться:

<body>
<p class="c">Here are some text and HTML</p>
</body>

2) Как мне вернуться:

<body>
<div class="a"></div>
<div id="b"></div>
<div id="d"></div>
</body>

3) Как мне вернуть:

<body>
<div class="a"></div>
<p class="c">Here are some text and HTML</p>
<div id="d"></div>
</body>

Следующий пример кода:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel='stylesheet' id='test-css'  href='http://www.domain.com/css/test.css?ver=2011' type='text/css' media='all' />
<script type='text/javascript' src='http://www.domain.com/js/test.js?ver=2010123'></script>
</head>

4) Как мне вернуть:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel='stylesheet' id='test-css'  href='http://www.domain.com/css/test.css?ver=2011' type='text/css' media='all' />
</head>

5) Как мне вернуть:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type='text/javascript' src='http://www.domain.com/js/test.js?ver=2010123'></script>
</head>

Спасибо за чтение:)

Ответы [ 3 ]

2 голосов
/ 10 апреля 2011

Попробуйте библиотеку HTML Purifier .Он делает именно то, что вам нужно, и имеет обширную документацию о том, как создавать фильтры.Если вы хотите фильтровать по соображениям безопасности, то непременно используйте его - у него есть парсер, который может справиться с самыми сумасшедшими из возможных схем XSS.

1 голос
/ 10 апреля 2011

Вы можете использовать все DOM-классы PHP, здесь вы найдете документ: http://fr2.php.net/manual/en/book.dom.php, и я уверен, что вы можете найти много учебников по своему усмотрению.пример для вашего второго случая:

<?php
$content = '<body><div class="a"></div><div id="b"><p class="c">Here are some text and HTML</p></div><div id="d"></div></body>';
$doc = new DOMDocument();
$doc->loadXML($content);

//Get your p element
$p = $doc->getElementsByTagName('p')->item(0);
//Remove the p tag from the DOM
$p->parentNode->removeChild($p);

//Save you new DOM tree
$html = $doc->saveXML();

echo $html;
//If you want to delete the first line
echo substr($html, strpos($html, "\n"));
1 голос
/ 10 апреля 2011

Попробуйте использовать:

strip_tags();

функция в php.

Пример использования :

    <?php
    $str = '<body>
            <div class="a"></div>
            <div id="b"><p class="c">Here are some text and HTML</p></div>
            <div id="d"></div>
            </body>
           ';
    echo strip_tags($str);
    echo "\n";
    ?>

вернется:

Here are some text and HTML 

или

    <?php
     $str = '<body>
             <div class="a"></div>
             <div id="b"><p class="c">Here are some text and HTML</p></div>
             <div id="d"></div>
             </body>
            ';
     echo strip_tags($str, '<body>');
     echo "\n";
    ?>

это разрешит тег '<body>' и удалит другие теги. результат:

<body>
Here are some text and HTML
</body>

Дополнительные примеры : Php.Net

...