Laravel允许链接消息

时间:2018-03-17 11:10:34

标签: laravel chat

当用户发送消息时,我需要在消息中允许链接。我怎么能这样做?

@foreach($mess as $message)
              <li data-mid="{{ $message->id }}">
                  <div class="row margin-left-none margin-right-none">
                      <div class="col-md-2 padding-right-none">
                          <div class="avatar-user text-center">
                                  <img src="{{ $message->sender->avatar }}" alt="$message->sender->name">
                          </div>
                      </div>

                      <div class="col-md-10 padding-left-none">
                          <div class="user-name">
                              <span>{{ $message->sender->name }}
                                  @if(Helper::getOnlineUser($message->sender->id))
                                  <i data-toggle="tooltip" title="Онлайн" class="material-icons online">fiber_manual_record</i>
                                  @else 
                                  <i data-toggle="tooltip" title="Оффлайн" class="material-icons offline">fiber_manual_record</i>
                                  @endif
                                  <span class="date float-right">{{ $message->created_at->formatLocalized('%H:%m') }}</span></span>
                          </div>
                          <div class="message">
                              {{ $message->body }}
                          </div>
                      </div>
                  </div>
              </li>
              @endforeach

这是消息的视图。

我如何允许链接?

示例:消息中的http://example.com =&gt;

<a href="http://example.com">http://example.com</a>

我需要{!! $ message-&gt; body !!}?或者如何?

在控制器中:

$mess = Chat::conversations($conversation)->for($user)->getMessages($limit, $request->page);

我使用这个包:https://github.com/musonza/chat

2 个答案:

答案 0 :(得分:0)

您可以在刀片中使用以下php功能来实现,

<?php
    function getDataWithURL($text){
        // The Regular Expression filter
        $reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";

        // Check if there is a url in the text
        if(preg_match($reg_exUrl, $text, $url)) {
               // make the urls hyper links
               echo preg_replace($reg_exUrl, "<a href=".$url[0].">".$url[0]."</a> ", $text);

        } else {
               // if no urls in the text just return the text
               echo $text;

        }
    }
?>

您只需在刀片文件中添加此代码,然后就可以检查并替换文本中的链接,

<div class="message">
     <?php getDataWithURL($message->body);?>
</div>

我希望你能理解。

答案 1 :(得分:0)

内置PHP函数来处理这个问题:

<div class="message">
     {!! strip_tags($message->body, '<a>') !!}
</div>

第二个参数是您的白名单。

这具有以下优点:

  • 你没有搞乱正则表达式
  • 您仍在使用刀片{!!!!}
  • 您正在使用由核心团队开发的经过良好测试的代码