2017-10-03 17 views
1

これらのランダムな概要を文字列として取得していますが、奇数1または2にはURLなどのリンクが含まれています。これらは生の文字列で、HTMLタグは含まれていません。PHP:文字列からWebアドレスを取得し、代わりにクエリ文字列を使わないでリンクを作成するには?

したがって、文字列内のURLは単にhttp://www...ect etcまたはちょうどwww.name... etcになります。私は何をしようとしている

クリック可能なリンクにこれらを変換することで、ときに出力、彼らが実際にリンクではなく、など、ユーザーがコピー&ペーストする必要があります文字列のURL

いるブラウザへ文字列の例は次のようになります。

ローレンipsum dolor sit amet consectetur adipisicing elit。可能性のあるものは、一般的な労働者の虐待を必要とするものである。労働組合は、労働者の義務を果たすために必要とされています。労働組合は、労働組合が必要としていた、労働者の義務を怠っていた。 Laboratoam quis vitae unde natus

http://www.websitename.com?title=oy96をドメイン名だけでクリック可能なリンクにするとよいでしょう。 www.websitename.com

+0

http://www.websitename.com?title=oy96をhttp://www.websitename.comに変換することを意味しますか? –

+0

おそらくhttps://regex101.com/r/1LgEps/2/またはプロトコルも削除する必要がある場合は、それを独自のキャプチャグループに移動してください。 – chris85

+0

あなたの理由があるかもしれませんが、それはユーザーインターフェイスのために悪いかもしれません。同じドメインが異なる記事で何度か言及されるとどうなるでしょうか? – Martijn

答えて

0

はちょうどあなたの問題への完璧なソリューションを書かれている:あなたはあなたのを持ちたい方法に応じて

string(302) "After the latest show, we went to <a href="http://www.example.com">www.example.com</a> and made some trouble online. <a href="https://www.letsfail.net/?a=b">www.letsfail.net/?a=b</a> gave us their support and also <a href="http://netjunkies.sample">netjunkies.sample</a> is involved. Finally we are in!" 

$demo = "After the latest show, we went to www.example.com and made some trouble online. https://www.letsfail.net/?a=b gave us their support and also netjunkies.sample is involved. Finally we are in!"; 

var_dump(webAddressesToHTML($demo)); 

出力:

function webAddressesToHTML($text,$label_strip_params=false,$label_strip_protocol=true) { 

    $webAddressToHTML = function ($url) use ($label_strip_params,$label_strip_protocol) { 
     $label = $url; 
     if($label_strip_params) { 
      $label = rtrim(preg_replace('/\?.*/', '',$label),"/"); 
     } 
     if($label_strip_protocol) { 
      $label = preg_replace('#^https?://#', '', $label); 
     } 
     return '<a href="'.((!preg_match("~^(?:f|ht)tps?://~i", $url)) ? "http://".$url : $url).'">'.$label.'</a>'; 
    }; 

    preg_match_all('@(http(s)?://)?(([a-zA-Z])([-\w]+\.)+([^\s\.]+[^\s]*)+[^,.\s])@',$text,$matched_urls); 
    return str_replace($matched_urls[0],array_map($webAddressToHTML,$matched_urls[0]),$text); 
} 

は、例を参照してください。ウェブアドレスラベルは、オプションのパラメータをtrueに設定するだけですr false。実際にパラメータを取り除きたい場合は、ユースケースによって異なります。

関連する問題