2013-08-30 39 views
1

我有将链接更改为可点击链接的功能,以及将youtube链接更改为嵌入视频的功能。php正则表达式更改youtube链接到视频

但是,如果您首先发布YouTube视频,然后是常规链接,则所有链接都会转化为YouTube视频。

如何编辑我的功能,只将YouTube链接更改为嵌入式视频并忽略常规链接?

function convertLinks($Link) { 
    $Link = preg_replace(
      "#(^|[\n ])([\w]+?://[\w]+[^ \"\n\r\t< ]*)#", 
      "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", 
      $Link); 
    $Link = preg_replace(
      "#(^|[\n ])((www|ftp)\.[^ \"\t\n\r< ]*)#", 
      "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", 
      $Link); 
    return $Link; 
} 
function convertYouTube($Link) { 
    if (preg_match(
      '%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', 
      $Link, 
      $match)) { 
     $video_id = $match[1]; 
     $Link = htmlspecialchars_decode(
       preg_replace(
         "#(^|[\n ])([\w]+?://[\w]+[^ \"\n\r\t< ]*)#", 
         "\\1<iframe width=\"640\" height=\"360\" src=\"http://www.youtube.com/embed/$video_id\" frameborder=\"0\" allowfullscreen></iframe>", 
         $Link)); 
    } 
    return $Link; 
} 
function convertMessages($Comment) { 

    $Comment = convertYouTube($Comment); 
    $Comment = convertLinks($Comment); 

    return $Comment; 
} 
+0

首先发布原始链接的格式,点击一个,嵌入的一个......这将有助于:) – Enissay

+0

链接只是任何常规链接http://www.google.com。 ConvertMessages()函数只接收整个消息并转换它找到的任何链接。所以它可能正是这篇文章,它会使谷歌链接点击。 – Andrew

+0

请问你可以在哪里调用'convertMessages()'来显示代码? –

回答

0

我想我知道ukautz从哪里来;您在preg_match中发现某些仅用于youtube的链接文本,但在您的preg_replace中,您的regex并不关心特定于youtube的文本。如果你在某种程度上能够在preg_matching之前将链接分离出来,这应该可以解决问题;但更简单的解决方案可能是将preg_match正则表达式与preg_replace正则表达式结合使用。