Необходимо преобразовать простой текст в корректно отформатированный документ 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]);