strip_tags плюс аннотированные ссылки - PullRequest
0 голосов
/ 23 сентября 2010

Примечание: входной HTML является доверенным; это не определено пользователем!

Я выделю то, что мне нужно, на примере.

С учетом следующего HTML:

<p>
  Welcome to <a href="http://google.com/" class="crap">Google.com</a>!<br>
  Please, <a href="enjoy.html">enjoy</a> your stay!
</p>

Я хотел бы преобразовать его в:

Welcome to Google.com[1]
Please, enjoy[2] your stay!

[1] http://google.com/
[2] %request-uri%/enjoy.html    <- note, request uri is something I define
                                   for relative paths

Я бы хотел иметь возможность настроить его.


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

У нас есть автоматизированная система шаблонов (с таблицами таблиц!) Для электронных писем, и как часть системы я хотел бы создавать составные электронные письма, т. Е. Содержащие как HTML, так и TEXT. Система предназначена только для предоставления HTML.

Мне нужно осмысленно преобразовать этот HTML в текст, например, я бы хотел как-то сохранить любые ссылки и изображения, возможно, в формате, который я указал выше.

1 Ответ

0 голосов
/ 23 сентября 2010

Вы можете использовать DOM для выполнения следующих действий:

$doc = new DOMDocument();
$doc->loadHTML('…');

$anchors = array();
foreach ($doc->getElementsByTagName('a') as $anchor) {
    if ($anchor->hasAttribute('href')) {
        $href = $anchor->getAttribute('href');
        if (!isset($anchors[$href])) {
            $anchors[$href] = count($anchors) + 1;
        }
        $index = $anchors[$href];
        $anchor->parentNode->replaceChild($doc->createElement('a', $anchor->nodeValue." [$index]"), $anchor);
    }
}
$html = strip_tags($doc->saveHTML());
$html = preg_replace('/^[\t ]+|[\t ]+$/m', '', $html);
foreach ($anchors as $href => $index) {
    $html .= "\n[$index] $href";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...