If you want truly secure code, a whitelist approach ('only allow these things: ...') is typically sturdier than a blacklist approach ('don't allow these things: ...').
You mentioned HTML Purifier and that "it has no option to remove all event attributes".
That's... technically correct, in that you can't tell it to remove event attributes. The reason is the selling point, though: It does that automatically. The option that's "missing" is an ability to configure HTML Purifier to allow event attributes. That's deliberately amiss. HTML Purifier (as the name suggests) has a strong security focus.
There are some 'unsafe HTML' aspects that you can allow using the HTML Purifier configuration (the default configuration is deliberately picky), but the event attributes are not amongst those. (Well, you could teach HTML Purifier to accept them if you jumped through hoops, but it would take a lot of effort.)
I'd recommend giving it another try if you want to accept user HTML. It's a fairly established tool that's been tested by a lot of people.
There are some very tricky ways to break HTML and inject JavaScript. For example, did you know that you can inject JavaScript using the src or href attribute? Did you know you can, in some browsers, inject JavaScript using the style tag? Take a look at this XSS cheatsheet. It might give you a rough idea what you're up against, and why whitelisting is generally considered more efficient.
Either way, good luck!
onClick='omghaxorz();'