我有一个包含链接的字符串。我希望我的php根据网址执行不同的操作。
回答:
function fixLinks($text)
{
$links = array();
$text = strip_tags($text);
$pattern = '!(https?://[^\s]+)!';
if (preg_match_all($pattern, $text, $matches)) {
list(, $links) = ($matches);
}
$i = 0;
$links2 = array();
foreach($links AS $link) {
if(strpos($link,'youtube.com') !== false) {
$search = "!(http://.*youtube\.com.*v=)?([a-zA-Z0-9_-]{11})(&.*)?!";
$youtube = '<a href="youtube.php?id=\\2" class="fancy">http://www.youtube.com/watch?v=\\2</a>';
$link2 = preg_replace($search, $youtube, $link);
} else {
$link2 = preg_replace('@(https?://([-\w\.]+)+(:\d+)?(/([\-\w/_\.]*(\?\S+)?)?)?)@', '<a href="$1" target="_blank"><u>$1</u></a>', $link);
}
$links2[$i] = $link2;
$i++;
}
$text = str_replace($links, $links2, $text);
$text = nl2br($text);
return $text;
}
最佳答案
首先,沟eregi
。已过时,它将很快消失。
然后,仅通过一遍就可以做到这一点太长了。我认为将这分为三个阶段会更好。
第1阶段对您的输入进行正则表达式搜索,查找所有看起来像链接的内容,并将其存储在列表中。
第2阶段遍历列表,检查是否有指向youtube的链接(parse_url
在此方面非常有用),然后将合适的替换项放入第二个列表中。
第三阶段:您现在有两个列表,一个包含原始匹配项,一个包含所需的替换项。在原始文本上运行str_replace,为搜索参数提供匹配列表,为替换提供替换列表。
这种方法有几个优点:
关于php - 使用PHP查找字符串形式的链接。与普通链接和YouTube链接不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7894107/