Есть несколько хороших регулярных выражений для замены HTML с помощью BBCode здесь . Обратите внимание на то, что он не пытается полностью разобрать HTML, просто для того, чтобы его дезинфицировать. Вероятно, он может убить теги, которые его простой «парсер» не может понять.
Например:
$store =~ s/http:/http:\/\//gi;
$store =~ s/https:/https:\/\//gi;
$baseurl = $store;
if (!$query->param("ascii")) {
$html =~ s/\s\s+/\n/gi;
$html =~ s/(.*?)<\/pre>/\[code]$2\[\/code]/sgmi;
}
$html =~ s/\n//gi;
$html =~ s/\r\r//gi;
$html =~ s/$baseurl//gi;
$html =~ s/(.*?)<\/h[1-7]>/\n\[b]$2\[\/b]\n/sgmi;
$html =~ s//\n\n/gi;
$html =~ s/
/\n/gi;
$html =~ s/