Look, Kay, you either have to have all html, in which case the writer needs to know what they're doing, or all text, in which you change it to htmlentities.
In the first case, whoever's writing it needs to know that to SHOW a < sign, you need to write it < -- that needs to be their responsibility. Then they get the <b> bold stuff </b> and can show a < as well.
In the second case, you invoke htmlentities on everything; they can't write any html. You should also check out the function nl2br() which will change their return chars into line breaks (i.e. <br>).
Your only other option is to agree on CERTAIN accepted html tags, let them write it as text, but do something special to the tags.
e.g.:
//here's the text
$text = "london <b>bridge</b> is \"falling\" < down";
//replace certain items
$text = str_replace('<b>','',$text);
$text = str_replace('</b>','',$text);
$text = str_replace('<i>','',$text);
$text = str_replace('</i>','',$text);
//make the change, and will survive
$text = htmlentities($text);
//now that the coast is clear, change the exceptions back
$text = str_replace('','<b>',$text);
$text = str_replace('','</b>',$text);
$text = str_replace('','<i>',$text);
$text = str_replace('','</i>',$text);
once again, either treat it as all html or all text, or you'll have to resort to those type of things.
Sam