Какой метод наиболее эффективен, зависит от ваших требований. Если вам нужно разрешить пользователям HTML, вам, вероятно, понадобится очиститель HTML.
Если, однако, вы никогда не примете HTML от пользователей, вам необходимо применить контекстную кодировку. Вы можете использовать XSS без добавления пользователем нового тега. Строка атаки может изменить существующий тег. Типичный пример:
<input type="text" name="email" value="<?php echo $email; ?>">
В этом примере, если $ email равен
" autofocus onfocus="alert(1)
Сработает JavaScript в обработчике события onfocus.
Побег, который вам нужно использовать, зависит от контекста. Мы находимся в JavaScript, или в HTML, или в атрибуте HTML, или в CSS?
См. https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet для получения дополнительной информации о том, как кодировать.