Forum Moderators: open
The alternative is to use something like markdown [daringfireball.net] to abstract your page code from the code they enter.
If you don't do this, users can add all sorts of nasty things, like <object> tags pointing to their custom-made ActiveX object, used to violate security (for example.)
Falls back to the same security issue, screen your input and accept only valid stuff, throw everything else away, including deprecated (font/center!) tags. At the very least, your system should include a series of tools to add correct markup where required (span instead of font, for example) and selections for markup style from your style sheet.
For the doctype, HTML 4.01 Transitional is the most flexible one around, so it is ideal for this kind of thing:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> It may well be impossible to ensure 100% validation due to the user input, but if your basic templates validate and you check incoming markup you should be safe.
I avoid <font> tags, and I also avoid the multiple-nested-div hell that many people seem to favour.