in reply to User Input for Web Content

If you “need to allow full (X)HTML codes to be entered,” well then, that’s that ... you will have to go with validation.   Otherwise, the BB-syntax is quite handy, and there are modules e.g. HTML::BBCode that can do it easily.   Basically, give ’em what they prefer.

A workflow that has done well for me is to allow writers to enter whatever “drafts” they want.   The new content is stored as they supplied it, but it is marked as a draft:   it hasn’t been validated yet, and it isn’t visible yet.   You provide a button that will validate the content upon request, and you also do this before publishing the content on the site.   Disk space being very cheap these days, I usually keep every draft, and use “soft deletes” (an is_deleted column ...), which creates a very forgiving and easy-to-use system.   A simple logging table keeps track of what the users actually did, and lets them un-do those things.   All of these things are very easy to do and they are really helpful ... even for a rarely-updated page.