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

我想让文本输出中的 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而不必转义到整个输出?


MYYA
浏览 152回答 1
1回答

慕运维8079593

一种方法是将原始字符串拆分为多个部分,记住哪些部分是链接,然后分别打印这些部分,在您的视图中构建链接。我不会把所有的东西都写出来,但在你看来应该是这样的:@foreach($postArray as $postItem)&nbsp; &nbsp; @if($postItem['type'] == 'link') <a href="{{$postItem['content']}}">{{$postItem['content']}}</a>&nbsp; &nbsp; @else {{$postItem['content']}}&nbsp; &nbsp; @endif@endforeach另一种方法是使用 javascript/jQuery 查找链接并在之后转换它们,但我不知道这是否是您认为的一个选项。
打开App,查看更多内容
随时随地看视频慕课网APP