2015-04-20 3 views
5

У меня есть переменная $text, которая содержит текст и HTML-код. Я бы хотел отобразить его HTML, но все равно убедитесь, что остальная часть строки экранирована.Экранирование строки с помощью Blade, отрисовка HTML

$text = 'Example text with image <img src"image_1.jpg">. More text...' 

// This will render the HTML but will NOT escape the string 
{!! $text !!} 

// This will escape and display the variable as raw string, with no HTML rendering 
{{ $text }} 

В Laravel 5 есть способ избежать строки с помощью Blade, позволяя HTML?

+0

Что вы подразумеваете под словом "escaping"? –

+0

Я имею в виду защиту от XSS, которая обычно достигается с помощью двойных фигурных скобок в Blade - '{{...}}'. Кажется, у меня может быть только один из двух одновременно: экранированная строка без рендеринга или рендеринга HTML без экранирования ... – lesssugar

+0

Как приложение должно решить, нужно ли ему удалять тег HTML или нет? Сама цель экранирования - * не * визуализировать HTML. – lukasgeiter

ответ

0

В этом случае вам необходимо выполнить ручную обработку строки.

Возможно, очиститель https://github.com/mewebstudio/Purifier сделает все, что вам нужно. Это сделает строки безвредными, и тогда можно безопасно распечатать html.

В противном случае вам нужно написать собственный парсер, если ничего подобного не найдено.

1

Я не знаю о такой функциональности в лезвии. Вы не можете просто разрешать определенные HTML-теги, потому что они могут иметь нежелательные вещи (например, onload) внутри них. Обработка строки может быть сложной. Рассматривали ли вы язык разметки?

+0

Точно! +1 для упоминания 'onload' – lukasgeiter

+0

Я второй это. Используйте метаязык с определенным набором разрешенных элементов, таких как markdown _if_, для отображения содержимого, созданного пользователем. Если нет (например, в вашем примере), просто отобразите его без сохранения. – luchaos