Usuń ataki XSS, jednocześnie pozwalając na HTML?

Ok, teraz mam dylemat, muszę pozwolić użytkownikom na wstawianie surowego HTML, ale także blokować wszystkie JS - nie tylko tagi skryptów, ale z href itp. W tej chwili wszystko, co wiem, to

htmlspecialchars($string, ENT_QUOTES, 'UTF-8');

Ale to również konwertuje poprawne tagi na kodowane znaki. Jeśli używam striptagów, to również nie działausuwa&nbsp;tagi! (Wiem, że możesz zezwolić na tagi, ale rzeczą jest, jeśli zezwalam na jakiekolwiek tagi, takie jak<a></a>&nbsp;ludzie mogą dodawać do niego złośliwe JS.

Czy jest coś, co mogę zrobić, aby zezwolić na tagi HTML, ale bez wtrysku XSS? Zaplanowałem funkcję:xss()&nbsp;i skonfigurowałem szablon mojej witryny. Zwraca ukryty ciąg. (Potrzebuję tylko pomocyuciekać&nbsp;:))

Dzięki!