заменить все, кроме определенных тегов HTML с htmlspecialchars () в PHP?

Я хотел бы обработать мой пользовательский ввод, чтобы разрешить только определенные HTML-теги, и заменить другие их HTML-сущностями, а также заменить не-теги-символы. Например, если бы я только хотел разрешить<b>&nbsp;и<a>&nbsp;тег, затем

allow_only("This is <b>bold</b> and this is <i>italic</i>.
            Moreover 2<3 and <a href='google.com'>this is a link</a>.","<b><a>");

должен производить

This is <b>bold</b> and this is &lt;i&gt;italic&lt;/i&gt;.
Moreover 2&lt;3 and <a href='google.com'>this is a link</a>.

Как я могу сделать это в PHP? Я в курсеstrip_tags()&nbsp;это можетУдалить&nbsp;нежелательные теги полностью, и я в курсеhtmlspecialchars()&nbsp;который может заменитьвсе теги&nbsp;их сущностями html, но ни один, где только определенные теги заменяются. Как это можно сделать в PHP?

И если нет «общего» способа сделать это, как я должен вообще продолжать обрабатывать пользовательский ввод, который может иметь действительный регулярный HTML, но также может иметь<&nbsp;признаки и потенциально опасный HTML-код?