【问题标题】:replace url into anchor tag with using nl2br in laravel blade在 laravel 刀片中使用 nl2br 将 url 替换为锚标签
【发布时间】:2025-12-06 10:05:01
【问题描述】:

你好,我有 laravel 刀片,这是有问题的部分

@php
$reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
@endphp

<div class="message"> 
                        @php
$text = nl2br(e($message));
@endphp
@if(preg_match($reg_exUrl, $text, $url)){!! preg_replace($reg_exUrl, '<a href="$0" target="_blank">$0</a> ', $text) !!}
@else {!!$text!!}
@endif
</div>

如果链接仅在文本中,但如果它与一些单词和一些断行混合,这很好用 喜欢这条消息

亲爱的买家你好

链接运行良好https://google.com/blabla

还有一些随机文本

它转换成这个html代码

hello dear buyer<br>
<br>
the link is working good<br>
<a href="https://google.com/blabla<br" target="_blank">https://google.com/blabla<br< a="">  /&gt;
<br>
and some random text<br>
<br>

如何解决这个问题

如果用户输入消息包含行,我想将 url 替换为锚标记并显示断线

还可以在 Blade 中使用 e() 函数来防止任何 html 代码运行

请大家帮忙

【问题讨论】:

  • $message 的内容是什么如果你想从你的 $message 中删除 html 标签,你可以这样做:$text = nl2br(e(strip_tags($message)));
  • $message 的内容在问题“你好亲爱的买家....”中,我已经做了 nl2br 和 e() 函数我的问题是如何添加链接到带有 nl2br 的锚点
  • nl2br 必须在正则表达式替换后运行,$text = nl2br(preg_replace($reg_exUrl, '&lt;a href="$0" target="_blank"&gt;$0&lt;/a&gt; ', $message));,参见3v4l.org/qKkpR

标签: javascript php html regex laravel


【解决方案1】:

嗯,如果&lt;br&gt; 标记之前只有一个空格,您的代码就可以工作。我认为您不能这样做,因为
与链接相关联。也许您现在可以这样做(直到其他人有更好的解决方案)并确保在 str_replace 之后调用 e()

$message = str_replace('<br>', ' <br>', $message);

// Optional to trim double spaces
$message = preg_replace('/\s\s+/', ' ', $message);

【讨论】:

    最近更新 更多