我遇到了如下划分字符串的麻烦: 什么是文本以保留文本什么是要在锚中转换的链接以及从youtube将其转换为iframe标记的链接是什么。
我的脚本如下所示:
$string='This is a link www.dinamomania.net this is a http://www.youtube.com/watch?v=U9LB6qGvdpQ';
echo makelink($string);
function makeLink($string){
/*** make sure there is an http:// on all URLs ***/
$string = preg_replace("/([^\w\/])(www\.[a-z0-9\-]+\.[a-z0-9\-]+)/i", "$1http://$2",$string);
/*** make all URLs links ***/
$string = preg_replace('/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i','<a target="_blank" href="$1">$1</A>',$string);
$string = preg_replace('/((http|ftp)\:\/\/)?([w]{3}\.)?(youtube\.)([a-z]{2,4})(\/watch\?v=)([a-zA-Z0-9_-]+)(\&feature=)?([a-zA-Z0-9_-]+)?/', '<iframe style= "margin:15px 0 15px 0;display:block;" width="500" height="300" src="http://www.youtube.com/embed/$7" frameborder="0" allowfullscreen></iframe>',$string);
/*** make all emails hot links ***/
$string = preg_replace("/([\w-?&;#~=\.\/]+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}[0-9]{1,3})(\]?))/i","<A HREF=\"mailto:$1\">$1</A>",$string);
return $string;
}
}
它所做的一切都是如此,我在iframe之前得到了一个像这样的“&gt;锚点,那是因为首先是链接到锚点,然后是youtube格式的iframe。所以它是一个锚点的框架
我正在寻找if语句来做这样的事情:
if( is link from youtube ) {
// do the iframe part
} else {
// do the anchor part
}
任何帮助/建议都将受到高度赞赏。谢谢!
我有这样的事情:
if (preg_match("/((http|ftp)\:\/\/)?([w]{3}\.)?(youtube\.)([a-z]{2,4})(\/watch\?v=)([a-zA-Z0-9_-]+)(\&feature=)?([a-zA-Z0-9_-]+)?/", $string))
{
$string = preg_replace('/((http|ftp)\:\/\/)?([w]{3}\.)?(youtube\.)([a-z]{2,4})(\/watch\?v=)([a-zA-Z0-9_-]+)(\&feature=)?([a-zA-Z0-9_-]+)?/', '<iframe style= "margin:15px 0 15px 0;display:block;" width="500" height="300" src="http://www.youtube.com/embed/$7" frameborder="0" allowfullscreen></iframe>',$string);
} else {
$string = preg_replace('/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i','<a target="_blank" href="$1">$1</A>',$string);
}
但又一次它正在做我的iframe部分而没有任何事情发生在锚点上。
答案 0 :(得分:2)
对网址
使用此模式preg_replace('/([^\'"])((ht|f)tps?:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i',
'$1<A target="_blank" href="$2">$2</A>',$string);
将IFRAME
置顶声明置于A
代码发出声明之前。
/*** make all the IFrame links ***/
$string = preg_replace(
'/((http|ftp)\:\/\/)?([w]{3}\.)?(youtube\.)([a-z]{2,4})(\/watch\?v=)([a-zA-Z0-9_-]+)(\&feature=)?([a-zA-Z0-9_-]+)?/',
'<iframe style= "margin:15px 0 15px 0;display:block;" width="500" height="300" src="http://www.youtube.com/embed/$7" frameborder="0" allowfullscreen></iframe>',
$string);
/*** make all URLs links ***/
$string = preg_replace('/([^\'"])((ht|f)tps?:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i',
'$1<A target="_blank" href="$2">$2</A>',$string);
答案 1 :(得分:0)
您可以使用正则表达式方法:
if (preg_match("/http://(?:www\.)?youtu(?:be\.com/watch\?v=|\.be/)(\w*)(&(amp;)?[\w\?=]*)?/i", $link))
{
// It's a Youtube link!
}
但也可以使用这种方法:
$parsedlink = parse_url($link);
if ($parsedlink['host'] == 'www.youtube.com')
{
// It's a Youtube link!
}