Разработчику. Сборник рецептов PHP
Задавайте вопросы

Преобразование HTML в ASCII

Вернуться назад

Задача

Необходимо преобразовать документ HTML в читаемый, форматированный ASCII-текст.

Решение

Если доступны внешние программы, преобразующие HTML в ASCII, такие как lynx, то вызовите их, например так:

$file = escapeshellarg($file);
$ascii = `lynx-dump $file`;

Обсуждение

Если внешняя программа форматирования недоступна, то функция pc_html2ascii(), показанная в примере 11.4, обрабатывает приемлемое подмножество HTML-элементов (без таблиц, фреймов и т. д.).

Пример 11.4. pc_html2ascii()

function pc_html2ascii($s) {
// конвертируем ссылки
$s = preg_replace('/<a\s+.*?href="?([^\" >]*)"?[^>]*>(.*?)<\/a>/i',
                              '$2 ($1)', $s);

// конвертируем <br>, <hr>, <p>, <div> в символы конца строки
$s = preg_replace('@<(b|h)r[^>]*>@i',"\n",$s);
$s = preg_replace('@<p[^>]*>@i',"\n\n",$s);
$s = preg_replace('@<div[^>]*>(.*)</div>@i',"\n".'$1'."\n",$s);

// конвертируем полужирный шрифт и курсив
$s = preg_replace('@<b[^>]*>(.*?)</b>@i','*$1*',$s);
$s = preg_replace('@<i[^>]*>(.*?)</i>@i','/$1/',$s);

// декодируем поименованные элементы
$s = strtr($s,array_flip(get_html_translation_table(HTML_ENTITIES)));
// декодируем нумерованные элементы
$s = preg_replace('//e','chr(\\1)',$s);

// удаляем все оставшиеся теги
$s = strip_tags($s);
return $s;
}

Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования

Рейтинг Сайтов ДОСКИ.РУ