2014-09-30 153 views
1

在大多数聊天应用程序中,当用户输入超链接时,它会在聊天窗口中自动变为可点击。如何使用PHP/JavaScript/JQuery复制此行为?PHP:检测字符串是否为超链接并使其可点击

本质上讲,我的工作原理是测试超链接的聊天消息字符串,并将它们包含在<a href>标签中,并以自己作为链接。那是正确的,如果是这样,我该怎么做?此外,我将如何使链接在新标签中打开,而不是替换我的网页?

编辑这花了我相当多的试验和错误,但这个PHP函数应该在所有真实的场景工作:

function formatTextLinks($text) { 
    $words = preg_split("/[\s,]+/", $text); 
    $offset = 0; 

    foreach($words as $value) { 
     preg_match("/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/", $value, $matches); 

     $s = $matches[0]; 
     if(!is_string($s)) continue; 
     $pos = strpos($text, $s, $offset); 
     if($pos !== false) { 
      $helper = ""; 
      if(strpos($s, "http://") === false || strpos($s, "https://") === false) $helper = "http://"; 
      $text = substr_replace($text, "<a href='".$helper.$s."' target='_blank'>".$s."</a>", $pos, strlen($s)); 
      $offset = $pos + strlen("<a href='".$helper.$s."' target='_blank'>".$s."</a>"); 
     } 
    } 

    return $text; 
} 
+0

途径广泛用于SO恐怕一个问题。 – RiggsFolly 2014-09-30 02:58:43

+0

@RiggsFolly我会如何重述它?这对我来说似乎很简单;所有我问的是我怎么能检测到一个字符串包含一个URL(完全限定或不是,它只需要在地址栏中工作),然后使它可点击作为超链接。 – StrongJoshua 2014-09-30 03:00:42

+0

完全限定:http://的正则表达式。或者不是:除非你有.com | .org | .net | ect的正则表达式,否则可能是不可行的 – Oberst 2014-09-30 03:02:05

回答

2

你可以使用PHP或JavaScript的正则表达式测试它是否是一个URL(链接)。 如果是使用jQuery创建一个html链接标签。

这是正则表达式模式

/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/ 

这是源http://code.tutsplus.com/tutorials/8-regular-expressions-you-should-know--net-6149

+0

当找到匹配时很难找出正确格式化文本的函数,尤其是因为使用preg_match_all使用该正则表达式返回的匹配根本不是超链接,只是其中的一部分(即只是“http://”或“www”)。我会将我的工作职能发布到我的问题中,以供将来的访问者使用 – StrongJoshua 2014-10-02 00:11:20

+0

一旦功能完全起作用,即:3 – StrongJoshua 2014-10-02 00:16:44

+0

我认为我的功能应该工作:) – StrongJoshua 2014-10-03 02:14:30

相关问题