我正在做一个论坛,我从互联网上获得了一个来自文本的链接功能,但我希望它忽略youtube链接,例如http://www.youtube.com/ ....
这是代码:
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 href=\"".$urlsToReplace[$i]."\">".$urlsToReplace[$i]."</a> ", $str);
}
return $str;
} else {
return $str;
}
}
答案 0 :(得分:1)
尝试这样的事情:
if (preg_match('/youtube.com/i', strtolower($str))) {
return $str;
}
在function makeLinks($str) {
用法:
var_dump(makeLinks('http://www.youtube.com'));
var_dump(makeLinks('http://www.test.com'));
输出:
string 'http://www.youtube.com' (length=22)
string '<a href="http://www.test.com">http://www.test.com</a> ' (length=54)
答案 1 :(得分:0)
在将$urls[0][$i]
添加到网址数组中以转换为链接之前,请查看youtube
是否与if(!$alreadyAdded) {
array_push($urlsToReplace, $urls[0][$i]);
}
不匹配。例如,替换此代码段:
if(!$alreadyAdded) {
if (!preg_match('/youtu\.?be/i', $urls[0][$i])) {
array_push($urlsToReplace, $urls[0][$i]);
}
}
有了这个:
{{1}}