2014-10-31 12 views
8

Tôi cố gắng hiển thị dữ liệu từ đầu vào văn bản của người dùng được lưu trong cơ sở dữ liệu của tôi.Làm cách nào để giữ ngắt dòng khỏi đầu vào của người dùng mà còn khử trùng trong lưỡi dao?

tôi cần phải giữ cho dòng vi phạm sử dụng nl2br,

và cũng muốn santize để ngăn chặn kịch bản độc hại bằng cách sử dụng lưỡi {{{}}}.

Nhưng {{{nl2br ($ output)}}} không hoạt động, thẻ br cũng sẽ được khử trùng.

Vui lòng cho tôi một số gợi ý, cảm ơn.

Trả lời

25

Đối Laravel 4 người dùng:

{{ nl2br(e($message)) }} 

e($x) tương đương với {{{ $x }}}.

Laravel 5 người dùng:

{!! nl2br(e($message)) !!} 

e($x) tương đương với {{ $x }}.

+1

tôi đã phải sử dụng nó như này {!! nl2br (e ($ message)) !!} –

7

Câu trả lời của Sawny là câu trả lời tuyệt vời thực sự thúc đẩy sức mạnh của cú pháp Blade tốt, ngoại trừ tôi sẽ tiến thêm một bước nữa. Bạn có thể sử dụng Blade::extend để tạo riêng Blade @ shortcodes của bạn vì vậy tôi sử dụng như sau:

Blade::extend(function($value, $compiler) 
{ 
    $pattern = $compiler->createMatcher('nlbr'); 
    return preg_replace($pattern, '$1<?php echo nl2br(e($2)); ?>', $value); 
}); 

Bây giờ trong mẫu Blade của bạn tất cả phải làm là một cái gì đó như thế này:

<div>@nlbr($sometext)</div> 

EDIT: tôi người nhận ra rằng điều này có thể rất tự hỏi, "Tôi đặt hàm Blade::extend ở đâu?"

Thành thật mà nói, nó có thể đi vào rất nhiều nơi (và nó phụ thuộc vào nếu bạn đang sử dụng Laravel 4 hoặc 5 là cách tiếp cận 'tốt nhất').

Một nơi đơn giản để đặt nó nằm trong các tệp routes.php hoặc global.php vì chúng sẽ nhận được ít công sức nhất. Tuy nhiên, đây không phải là tệp tốt nhất để đưa chúng vào và bạn nên học cách tạo ra các Nhà cung cấp Laravel.

-1

chỉ cần sử dụng loại bỏ này BR không cần phải viết chức năng này nl2br nó hoạt động tốt

{!!($mylogin->title) !!} 
Các vấn đề liên quan