Подтвердить что ты не робот

Удалить комментарии из html исходного кода

Я знаю, как получить исходный код html через cUrl, но я хочу удалить комментарии в html-документе (я имею в виду, что находится между <!-- .. -->). Кроме того, если я могу взять только BODY html-документа. спасибо.

4b9b3361

Ответ 1

Попробуйте PHP DOM *:

$html = '<html><body><!--a comment--><div>some content</div></body></html>'; // put your cURL result here

$dom = new DOMDocument;
$dom->loadHtml($html);

$xpath = new DOMXPath($dom);
foreach ($xpath->query('//comment()') as $comment) {
    $comment->parentNode->removeChild($comment);
}

$body = $xpath->query('//body')->item(0);
$newHtml = $body instanceof DOMNode ? $dom->saveXml($body) : 'something failed';

var_dump($newHtml);

Выход

string(36) "<body><div>some content</div></body>"

Ответ 2

Если в cUrl нет опции для этого параметра (и я подозреваю, что нет, но раньше я был не прав), вы можете, по крайней мере, проанализировать полученный HTML-код в своем сердечном содержимом с помощью PHP DOM parser.

Это, скорее всего, будет лучшим выбором в долгосрочной перспективе с точки зрения конфигурации и поддержки.

Ответ 3

Я бы подключил его к sed для регулярного выражения, что-то вроде

curl http://yoururl.com/test.html | sed -i "s/<!\-\-\s?\w+\s?\-\->//g" | sed "s/.?(<body>.?</body>).?/\1/"

Регулярные выражения могут быть неточными, но вы получаете идею...

Ответ 4

Реджикс решил эту проблему для меня следующим образом:

function remove_html_comments($html = '') {
    return preg_replace('/<!--(.|\s)*?-->/', '', $html);
}