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

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

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

Задача

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

Решение

Во-первых, закодируйте элементы с помощью функции htmlentities(),

Для кириллического текста htmlspecialchars().

затем преобразуйте текст в различные HTML-структуры. Функция pc_ascii2html(), показанная в примере 11.3, выполняет основные преобразования для ссылок и символов конца абзаца.

Пример 11.3. pc_ascii2html()

function pc_ascii2html($s) {

$s = htmlentities($s);
$grafs = split("\n\n",$s);
for ($i = 0, $j = count($grafs); $i < $j; $i++) {
// Ссылка на то, что выглядит как http или ftp URL
$grafs[$i] = preg_replace('/((ht|f)tp:\/\/[^\s&]+)/',
                    '<a href="$1">$1</a>',$grafs[$i]);
// Ссылка на почтовые адреса
$grafs[$i] = preg_replace('/[^@\s]+@([-a-z0-9]+\.)+[a-z]{2,}/i',
               '<a href="mailto:$1">$1</a>',$grafs[$i]);

// Начало нового абзаца
$grafs[$i] = '<p>'.$grafs[$i].'</p>';
}
return join("\n\n",$grafs);
}

Обсуждение

Чем больше вы знаете о строении ASCII-текста, тем лучше может быть HTML-преобразование. Например, если выделение обозначается звездочками (*asterisks*) или символами косой черты (/slashes/) вокруг слова, то можно добавить правила, реализующие это следующим образом:

$grafs[$i] = preg_replace('/(\A|\s)\*([^*]+)\*(\s|\z)/',
                                             '$1<b>$2</b>$3',$grafs[$i]);

$grafs[$i] = preg_replace('{(\A|\s)/([^/]+)/(\s|\z)}',
                                             '$1<i>$2</i>$3',$grafs[$i]);

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

Рейтинг@Mail.ru

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

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

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