Laravel делает URL в текстовом выводе кликабельным (без экранирования) - PullRequest
0 голосов
/ 24 мая 2019

Я хотел бы сделать 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 Ответ

0 голосов
/ 24 мая 2019

Один из способов состоит в том, чтобы разбить исходную строку на части, запомнить, какие части являются ссылками, а затем распечатать отдельные части, построив ссылку в вашем представлении.
Я не собираюсь печатать все, но это будет что-то вроде этого:

@foreach($postArray as $postItem)
    @if($postItem['type'] == 'link') <a href="{{$postItem['content']}}">{{$postItem['content']}}</a>
    @else {{$postItem['content']}}
    @endif
@endforeach

Другим способом было бы использовать javascript / jQuery для поиска ссылок и последующего их преобразования, но я не знаю, является ли это вариантом по вашему мнению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...