为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 使文本输出中的 URL 可点击

Laravel 使文本输出中的 URL 可点击

PHP
MYYA 2021-06-28 17:57:31
我想让文本输出中的 URL 可点击,而不必转义整个输出。首先我想这样做,但我必须逃避所有输出,这是一个安全风险。function formatContent($content)  {    $url_filter_protocol = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";    $url_filter_www = "/(www)\.[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";    if (preg_match($url_filter_protocol, $content, $url)) {      return preg_replace($url_filter_protocol, "<a href='$url[0]' target='_blank'>$url[0]</a> ", $content);    } elseif (preg_match($url_filter_www, $content, $url)) {      return preg_replace($url_filter_www, "<a href='https://$url[0]' target='_blank'>$url[0]</a> ", $content);    } else {      return $content;    }  }{!! nl2br(formatContent($post->content)) !!}有谁知道,我如何转换字符串中的 URL而不必转义到整个输出?
查看完整描述

1 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

一种方法是将原始字符串拆分为多个部分,记住哪些部分是链接,然后分别打印这些部分,在您的视图中构建链接。

我不会把所有的东西都写出来,但在你看来应该是这样的:


@foreach($postArray as $postItem)

    @if($postItem['type'] == 'link') <a href="{{$postItem['content']}}">{{$postItem['content']}}</a>

    @else {{$postItem['content']}}

    @endif

@endforeach

另一种方法是使用 javascript/jQuery 查找链接并在之后转换它们,但我不知道这是否是您认为的一个选项。


查看完整回答
反对 回复 2021-07-09
  • 1 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信