检测字符串中带有preg_match_all的链接并转换为链接

时间:2019-02-10 18:02:46

标签: php regex

此代码创建链接,但无法识别结尾或开头。

希望你能帮助我

function makeLinks($str) {
    $reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
    $urls = array();
    $urlsToReplace = array();
    if(preg_match_all($reg_exUrl, $str, $urls)) {
        $numOfMatches = count($urls[0]);
        $numOfUrlsToReplace = 0;
        for($i=0; $i<$numOfMatches; $i++) {
            $alreadyAdded = false;
            $numOfUrlsToReplace = count($urlsToReplace);
            for($j=0; $j<$numOfUrlsToReplace; $j++) {
                if($urlsToReplace[$j] == $urls[0][$i]) {
                    $alreadyAdded = true;
                }
            }
            if(!$alreadyAdded) {
                array_push($urlsToReplace, $urls[0][$i]);
            }
        }
        $numOfUrlsToReplace = count($urlsToReplace);
        for($i=0; $i<$numOfUrlsToReplace; $i++) {
            $str = str_replace($urlsToReplace[$i], "<a target='_blank' rel='noopener' href=\"".$urlsToReplace[$i]."\">".$urlsToReplace[$i]."</a> ", $str);
        }
        return $str;
        } else {
        return $str;
    }
}

结果(识别为链接的内容标记为粗线)

https://test-test.de

https://test-test.inf o

https://test-test.de / test-and-test /

https://test-test.inf o /测试并测试/

www.test-test.de/test-and-test /

https://www.test-test.inf o /测试并测试/

https://www.test-test.de/test-and-test/

0 个答案:

没有答案