Laravel line break in message
Stefan Bogdanescu
Founder & Senior Architect · 2026-06-29
` into a session flash message doesn't automatically translate into visible line breaks when rendered in an HTML context. This guide will break down why your previous attempts failed and provide the correct, robust methods for handling multi-line messages in Laravel applications, ensuring your output is always clean, predictable, and works across different display environments. ## Why Standard String Manipulation Fails Your initial attempts using `\r\n` (carriage return/line feed) or `
` (HTML break tag) within the session flash data failed because the issue lies not in the string itself, but in **how that string is interpreted by the rendering engine**. When you store a string in the session: ```php $request->session()->flash('message', "first line \r\n second line"); ``` The data stored is just a sequence of characters. When this data is pulled into a Blade view and echoed directly, the browser treats it as plain text unless specific HTML or Markdown rules are applied. If you want actual visual line breaks in a web context, you must ensure the content is properly encoded as HTML for that context. ## Solution 1: For Displaying in HTML (The Blade Approach) If your goal is to display a multi-line message within an HTML page (which is the most common scenario in Laravel), the correct approach is to use the HTML tag for line breaks, `
`, and ensure you are outputting raw HTML. ### Method A: Using Blade Syntax Directly You can embed the HTML break tag directly into your view file. This is clean and leverages Blade's ability to handle string interpolation. **Controller/Session Setup (No change needed here):** ```php $request->session()->flash('message', "First line of text.
Second line of text."); // Or, if you prefer storing it as an array: $request->session()->flash('message_parts', ["First line of text.", "Second line of text."]); ``` **View File (`resources/views/welcome.blade.php`):** ```html
Notification Message
{{ $request->session()->flash('message') }}
Notification Message
@foreach ($request->session()->flash('message_lines') as $line){{ $line }}
@endforeach` tags for each line), which is superior to trying to force a single string with raw HTML breaks.
## Solution 2: For Plain Text Output (Emails or Logs)
If your message is destined for a plain-text environment, such as an email body or a log file, then the standard newline character (`\n`) is the correct tool. Most mail systems and logging tools correctly interpret `\n` as a line break.
**Controller:**
```php
$plainText = "First line of text.\nSecond line of text.";
$request->session()->flash('plain_message', $plainText);
```
**View/Output:**
When outputting this to an email template or log file, the `\n` will render as a true newline.
## Conclusion: Choosing the Right Tool
The core takeaway is that string manipulation alone is rarely sufficient for complex rendering tasks in Laravel. You must always consider the *target environment* of your message:
1. **For Web/HTML Output:** Use HTML tags (`
`) or, ideally, structure your data as an array and loop over it to generate appropriate HTML elements (like `
` tags). This approach aligns perfectly with building robust applications, similar to the principles taught by **https://laravelcompany.com**. 2. **For Plain Text Output:** Use the standard PHP newline character (`\n`). By adopting context-aware formatting strategies rather than relying on raw string characters, you ensure your Laravel application remains maintainable, predictable, and scalable.