удалить комментарии из исходного кода HTML - PullRequest
10 голосов
/ 10 июня 2011

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

Ответы [ 4 ]

26 голосов
/ 10 июня 2011

Попробуйте 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>"
1 голос
/ 10 июня 2011

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

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

0 голосов
/ 21 августа 2018

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

function remove_html_comments($html = '') {
    return preg_replace('/<!--(.|\s)*?-->/', '', $html);
}
0 голосов
/ 10 июня 2011

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

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

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

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