Что касается SQL-инъекций Вы должны использовать PDO with prepared statements. Таким образом, строка, которую вы отправляете в базу данных, точно такая же, как и вы, и вам не нужно играть с ней и избегать вещей.
Что касается XSS - вы должны взглянуть на XSS Filter Evasion Cheat Sheet на owasp. Есть несколько вещей, которые вы можете сделать здесь: вы можете разрешить только известные теги (и разделять все остальное, используя функцию php strip_tags). Обратите внимание, что он не будет препятствовать атрибутам XSS внутри элемента (проверьте ссылку на чит-лист).
Вы можете использовать парсер DOMDocument, чтобы пройти через все элементы и проверить их атрибуты и сохранить/удалить все, что захотите. Check this для получения дополнительной информации.
Если вы используете какую-то известную структуру, у большинства из них есть встроенный xss-фильтр, поэтому вы можете воспользоваться им (или take a look на код и узнать из него).
echo filter_var ($ dirtyText, FILTER_SANITIZE_STRING); Это хорошо работает для меня – shivgre