【问题标题】:How to linkify urls in a string with php? [duplicate]如何用php链接字符串中的url? [复制]
【发布时间】:2014-11-06 08:26:03
【问题描述】:

我有以下具有以下模式的字符串:

1)click on http://www.google.com

2) click onhttp://www.google.com".

3) click on www.google.com

4) click onwww.google.com

5) click on www.google.com#xyz

6) click onwww.google.com#xyz

我需要使用正则表达式将所有这些字符串转换为以下方式:

click on <a href="http://www.google.com" target="_blank">http://www.google.com</a>

click onhttp://www.google.com

click on <a href="http://www.google.com" target="_blank">www.google.com</a>

click onwww.google.com

click on <a href="http://www.google.com#xyz" target="_blank">www.google.com#xyz</a>

click onwww.google.com

【问题讨论】:

  • 所以click on 变成Look on 并且URL 是可点击的?
  • 我也想要第二个建议。
  • @AbhishekKasera 我编辑了my answer 以包含target="_blank"。有什么我错过的吗?

标签: php regex yii


【解决方案1】:
function linkify( $string ) {
    return preg_replace( "~\bhttp(s)?://[^<>[:space:]]+[[:alnum:]/]\b~", "<a href=\"\\0\" target=\"_blank\">\\0</a>", $string);
}

https://eval.in/218437

【讨论】:

  • 它适用于 https,但当 url 包含 www 即时不起作用。 “在www.example.com”
  • 哦,你已经更新了问题。
  • 是的,添加所有要求,所以请建议我解决这个问题
  • 嗯,目前尚不清楚您如何确定合法的三级域的外观。 onwww.somesite.com 是一个有效的域名,严格来说不是 URL(因为没有架构)。
【解决方案2】:

你可以使用类似的东西;

/\s((http(s)?\:\/\/[a-zA-Z0-9\-\.]+\.)(com|org|net|mil|edu|))/i

替换为

<a href="$2">$2<a/>

http://regex101.com/r/nI4gU6/7

这会让你的 PHP 变成这样;

 $str = preg_replace(
            '/\s((http(s)?\:\/\/[a-zA-Z0-9\-\.]+\.)(com|org|net|mil|edu))/i',
            ' <a href="${1}" target="_blank">${1}</a>', 
             $s);

例如:https://eval.in/218269

注意:您需要修改它以允许all the other (g)TLD's - 但是基本设置在那里)

【讨论】:

  • 有很多新的顶级域名...
【解决方案3】:

你可以有这样的东西:

<?php
 function addhttp($url) {
   if (false === strpos($url, '://')) {
      $url = 'http://' . $url;
   }
   return $url;
 }

 $url = "www.google.com";

 var_dump(addhttp($url)); 
 ?>

然后对于要输出“http://”的 URL,只需将其传递给函数即可。

输出:http://codepad.org/MlvXWRR2

【讨论】:

  • @downvoter - 为什么没有解释就投反对票?看起来很蠢。
  • 添加http:// 不会自动使链接可点击。
  • 哇,我没有再次添加&lt;a href...&gt;,愚蠢的原因。无罪
  • plz,建议我解决方案...问题已更新
猜你喜欢
  • 2010-10-05
  • 1970-01-01
  • 1970-01-01
  • 2018-06-10
  • 1970-01-01
  • 2013-09-18
  • 2014-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多