0

これが私のコードです:

function prepare_url($text) {
    if (strpos($text, 'youtu') === FALSE) {
        $url = "\\2";
    } else {
        $url = "<br><div id='".$playerid."'>Loading the player ...</div><script type='text/javascript'>jwplayer('".$playerid."').setup({flashplayer:'/jwplayer/player.swf',file:'".$text."',height:240,width:400});</script><br>";
        return $url;
    }
    $text = preg_replace("#(^|[\n ])(([\w]+?://[\w\#$%&~.\-;:=,?@\[\]+]*)(/[\w\#$%&~/.\-;:=,?@\[\]+]*)?)#is", "\\1<a href=\"\\2\" target=\"_blank\">".$url."</a>", $text);
    $text = preg_replace("#(^|[\n ])(((www|ftp)\.[\w\#$%&~.\-;:=,?@\[\]+]*)(/[\w\#$%&~/.\-;:=,?@\[\]+]*)?)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">".$url."</a>", $text);

    return $text;
}

このコードは、YouTube URL が置き換えられた後に何も起こらない場合にのみ機能します。Youtube URL が置換された後のすべてが $text 変数の一部として追加され、使用できなくなります。YouTube の URL の末尾に達したらすぐに preg_replace を停止するにはどうすればよいですか? それは空白にぶつかるとすぐですか?

どんな助けでも大歓迎です:)

4

1 に答える 1

0

私がしばらく前に書いたこの関数は、入力したテキストを受け取り、メールリンクのURLを設定したり、YouTubeビデオを埋め込んだりします。YouTubeのURLの末尾の文字が削除されます。それが役に立てば幸い:

function MakeAutoLink($string)
{
        /** Add http:// **/
    $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 rel=\"nofollow\" target=\"_blank\" href=\"$1\">$1</A>",$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);
        /** The Regular Expression filter **/
    $youtube_video = "/v=(.+?)&/";
        /** Check if there is a url in the text **/
    $video = preg_match_all($youtube_video, $string, $match);
    if ($video)
        { 
            $links=$match[0]; 
        for ($key=0;$key<$video;$key++) 
            { 
                $newstring = $string.'<br /><br /><iframe title="YouTube video player" class="youtube-player" type="text/html" width="320" height="185" src="http://www.youtube.com/embed/'.substr($links[$key], 2,11).'" frameborder="0" allowFullScreen></iframe><br />';
                return $newstring;
            } 
        } 
    return $string;
}

これをサーバーにドロップし、テストのために移動します。

video.php

    <?PHP
function MakeAutoLink($string)
    {
            /** Add http:// **/
        $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","$1",$string);
        $youtube_video = "/v=(.+?)&/";
            /** Check if there is a url in the text **/
        $longurl = preg_match_all($youtube_video, $string, $match);
        if ($longurl)
            { 
                $links=$match[0]; 
            for ($key=0;$key<$longurl;$key++) 
                { 
                    $newstring = "http://www.youtube.com/watch?v=".substr($links[$key], 2,11);
                    return $newstring;
                } 
            } 
        return $string;
    }

?>
<!DOCTYPE html>
<html lang="en">
  <head>
  </head>
  <body>
 <?PHP
 if(isset($_POST['video']))
    {
        echo MakeAutoLink($_POST['video']);
    }
    else
        { 
 ?> 

 Try these two links:<br>
 http://www.youtube.com/watch?v=1rqQQkcB0MY<br><br>
 http://www.youtube.com/watch?v=1rqQQkcB0MY&some more text<br>
 <div align="center">
 <form method="post" action="<?php echo htmlentities($_SERVER['PHP_SELF']);?>"> 
    <label>video:</label>
    <input type="text" title="Youtube video" name="video" size="60" value="" autocomplete="off" autofocus>
    <br><br>    
    <input class="login" type="submit" name="login" value="Get Video">
 </form>
 </div> 
 <?PHP
 }
 ?>

  </body>
</html>

「&」を使用してビデオIDの後に他のオプションがある場合、これはURLを変換します。最初のスペースが見つかったらすぐに停止する場合は、/ v =(。+?)&//v=(.+ ?)に置き換えます/ )と/の間に空のスペースを残してください

于 2013-01-01T01:33:19.020 に答える