Безопасность пользовательских текстов. Как правильно выводить данные?
Есть проект, где пользователи могут добавлять разные посты.
Как правильно сделать, что бы можно было вводить как и просто текста, так и код. Но что бы код был показан как код с минимальной подстветкой.
В плане безопасности как лучше?
Сейчас перед добавлением в базу я делаю так: 'text' => trim(htmlspecialchars($text)),
А вывожу так, что бы работали переносы строк:
В Laravel {!! !!} это означает что htmlspecialchars не используется при выводе. {!! nl2br(e($post->text))!!}
Но сейчас я подумал, сделать как то так - Если в тексте есть теги, то подкладывать вывод с подстветкой например, если нет, то вывести как текст.
Я не часто сталкивался с выводом пользовательских данных. Какие есть нюансы?
Может есть готовые библиотеки для упрощения? Что бы например в простом тексте фильтровать дубли пробелов или табов или новых пустых строк, а если есть код в тексте, то оформлять его как код.
Не любят пользователи учить markdown. Предлагал тут "корреспондентам" себе же жизнь упростить, так нет, пусть лучше копипастнутая вёрска на сайте вылезает.
Большенство населения не знают как зарегистрироваться и как почту завести) Я уже на сайте и так все "До некуда" упрощаю, а Markdown это для них будет "Ад" те более у меня сайт для поселков и регионов рассчитан, и аудиторию за 40 лет.
Вообще любой нормальный шаблонизатор экранирует вывод, в том же Twig'е приходится отдельно указывать что вот эту переменную надо вывести "сырой". Ну и вообще, шаблонизатор - просто полезная вещь.