но на практике...
пардон за двойной пост - энтер случано нажался.
Так вот:
nl2br. Зачем делать это перед положением в базу - для меня величайшая загадка. Я уж не говорю о том, что данные могут выводиться не в хтмл, а снова в форму для редактирования. или в письмо. или еще бог знает куда. И в этом случае <бр>ы будут откровенно лишними. Но даже и просто в базу класть их - зачем?
htmlspecialchars. Дефолтная функция не годится. ибо заменяет совершенно невинные символы навроде амперсанда. И если у вас есть гиперссылка с переменными, то она будет безнадежно испорчена.
Мне кажется, что замены теговых скобок будет более чем достаточно.И опять же - зачем это делать перед помещением в базу данных? Только место занимать.
В общем, я думаю, что принятым данным достаточно сделать addslashes (если РНР сам не делает) и записать в базу.
а для выдачи HTML я бы немного изменил кириллову функцию
function tohtml($string)
{
$string = str_replace("<", "&lt;", $string);
$string = str_replace(">", "&gt;", $string);
$string = str_replace('"', "&quot;", $string);
return nl2br($string);
}