Итак, я использую Vue.js
и хочу отобразить текст, содержащий ссылки. Текст вводится пользователями.Показать ссылки как <a> теги, но не разрешать другие теги?
Пример:
Это сайт www.example.com, который лучше, чем www.oldexample.com
Я хочу, чтобы она появилась как:
Это сайт www.example.com, который лучше, чем www.oldexample.com
Итак, я хочу, чтобы ссылки были гиперссылками. Проблема в том, что это пользовательский ввод, поэтому он должен быть защищен XSS. В настоящее время я отображаю его как текст, поэтому я не могу использовать HTML-теги в нем. Если бы я использовал v-html
и обернул все ссылки в тегах a
, это было бы слишком опасно, так как пользователи могли бы ввести любой HTML
.
Я думал о разделении строки по URL-адресам и обертывания каждой части, которая не является ссылкой в теге span
и каждой ссылке в теге a
. Но это слишком много обработки, чтобы сделать это только для гиперссылки URL-адресов.
Есть ли более простой способ для этого, то есть XSS безопасен (пользователи не могут вводить другие теги, кроме <a>
)?
Проверьте это: http://stackoverflow.com/questions/1500260/detect-urls-in-text-with -javascript –
Вы пытаетесь заменить введенный пользователем текст, как пользователь его вводит, или в другом месте на странице? Замена на месте немного сложна, вам, вероятно, нужна библиотека, которая может токенизировать входные данные для поддержки таких вещей, как backspace, удаление гиперссылки (подумайте о том, как Word/Outlook делает это с гиперссылками в тексте). Под защитой XSS вы имеете в виду пользователей, которые потенциально вводят текст ссылки, например www.gmail.com, который на самом деле имеет href www.steal-my-password.io? –
Это не на месте. У меня есть раздел комментариев, и я хочу сделать ссылки кликабельными. – Cristy