У меня есть форма, в которой пользователь может опубликовать глобальное уведомление в системе (для просмотра другими пользователями).
Система выводит HTML напрямую из БД (когда пользователь хочет увидеть уведомление).
Я бы хотел, чтобы некоторые html-теги оставались нетронутыми, а остальные - с применением htmlspecialchars ().
Я уже пытался применить
str_replace($search, $replace, htmlspecialchars($str))
стратегия, но она кажется очень медленной. Слишком медленно, на самом деле. И также это не безопасно, что всегда будет работать, есть ли альтернатива для этого?
Я хотел что-то, что сделало работу strip_tags () за исключением того, что вместо чередования тегов он будет применять htmlspecialchars к недопустимым тегам.
ДОБАВИТЬ (ed) информация (по запросу):
$ str может быть любого размера, о котором вы только можете подумать. Я подумал об использовании большой строки (1М символов (генерируется случайным образом с некоторыми разрешенными и некоторыми недопустимыми тегами внутри. Все теги имели атрибуты) по причине тестирования одного из худших сценариев С логикой: если это работает так, то это должно работать для более простых случаев.
Серверу потребовалось 5 секунд для полной обработки str_replace (с htmlspecialchars). Этот тест был сделан на моем компьютере с процессором 2 ГГц и оперативной памятью DDR3.
$ search и $ replace имеют в общей сложности 7 замен. Тем не менее они не всегда работают. В некоторых случаях $ search дает ложные срабатывания или ложные отрицания.
Чтобы уточнить, я применяю эти изменения при сохранении в БД, а не при извлечении из БД.