1

リンクをクリック可能なリンクに変更する関数と、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;
}
4

1 に答える 1

0

ukautz がどこから来ているのかがわかったと思います。preg_match で特定の youtube のみのリンク テキストを見つけていますが、preg_replace では、正規表現は youtube 固有のテキストを気にしません。リンクを preg_matching する前にどうにかしてリンクを分離できた場合、これで問題は解決するはずです。ただし、より簡単な解決策は、preg_match 正規表現を preg_replace 正規表現と組み合わせることです。

于 2014-03-04T23:35:06.920 に答える