我在php中创建了一个博客。用户可以发布文本,链接或youtube链接等任何内容。我使用preg_replace()来使我的代码确定何时有链接或youtube链接。这就是我使用的:
<?php
//...code
$row['comment'] = preg_replace('@(https?://([-\w.]+[-\w])+(:\d+)?(/([\w-.~:/?#\[\]\@!$&\'()*+,;=%]*)?)?)@', '<a href="$1" target="_blank">$1</a>', $row['comment']);
$row['comment'] = preg_replace("/\s*[a-zA-Z\/\/:\.]*youtube.com\/watch\?v=([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i"," <object width=\"100px;\" height=\"100px;\"><param name=\"movie\" value=\"http://www.youtube.com/v/$1&hl=en&fs=1\"></param><param name=\"allowFullScreen\" value=\"true\"></param><embed src=\"http://www.youtube.com/v/$1&hl=en&fs=1\" type=\"application/x-shockwave-flash\" allowfullscreen=\"true\" width=\"400px;\" height=\"200px;\"></embed></object>",$row['comment']);
// then prints the $row['comment']
?>
我的preg_replace()工作正常,并在有链接或youtube链接时确定成功。唯一的问题是,当有youtube链接发布时,它显示2次...可能是因为我给了$ row ['comment'] 2个不同的声明。知道我怎么能摆脱这个?将上述2个语句合并为1更好吗?我该怎么办?或者我可以使用的任何其他“if”陈述?
知道如何将上述两个陈述合并为一个吗?
答案 0 :(得分:0)
我更喜欢使用strpos函数来检查字符串(在你的情况下是url)。有关详细信息,请参阅PHP.net文档。
建议使用if结构,因为您需要为每种链接类型执行不同的实现。以下StackOverflow question非常有用。
答案 1 :(得分:0)
以下代码可以解决问题。
function get_link_type($url)
{
if(strpos($url, 'youtube') > 0)
{
return 'youtube';
}
else
{
return 'default';
}
}
$url = 'http://www.google.com/watch?v=rj18UQjPpGA&feature=player_embedded';
$link_type = get_link_type($url);
if($link_type == 'youtube')
{
$new_link = '<iframe width="560" height="315" src="//'. $url .'" frameborder="0" allowfullscreen></iframe>';
}
else
{
$new_link = '<a href="'. $url .'">'. $url .'</a>';
}
echo $new_link;