タグ:Youtube

YoutubeのコードをW3Cバリデーションチェックでもエラーが出ないコードに変換するプログラム

Youtubeの埋め込みコードをそのまま張り付けると、embedタグが含まれるためW3Cバリデーションチェックで多大なエラーを吐いてくれます。

はっきり言ってembedタグなくても、マルチブラウザで対応できる記述方法はある!

たとえば「はやぶさ」の動画の埋め込みコード

<object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/waJdDeYlidQ?fs=1&amp;hl=ja_JP"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/waJdDeYlidQ?fs=1&amp;hl=ja_JP" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object>

これはこのように変換できます。

<object data="http://www.youtube.com/v/waJdDeYlidQ?fs=1&amp;hl=ja_JP" type="application/x-shockwave-flash" width="640" height="385"><param name="movie" value="http://www.youtube.com/v/waJdDeYlidQ?fs=1&amp;hl=ja_JP" /><param name="wmode" value="transparent" /></object>

用は

<object data="動画のURL" type="application/x-shockwave-flash" width="動画の幅" height="動画の高さ"><param name="movie" value="動画のURL" /><param name="wmode" value="transparent" /></object>

となればよいわけです。

が、自分で張り付けるならこれくらいの作業は行うんですが、お客さんにもやってもらうというわけにはなかなかいきません。

バリデーションチェックなんてWEB屋か詳しい人でもない限りあまり気にしないでしょうからね。

というわけでPHPにて自動的に変換する関数を作りました。

※Youtubeコードだけの場合、変換することが可能なプログラムです。
記事中に含まれるコードを変換させるのはこの関数では無理です。
カスタムフィールドなどを使ってYoutubeコードを投稿できる仕様にしている場合のみご利用ください。

function youtubeCodeW3C($movie_code, $movie_title=NULL, $width=NULL, $height=NULL){

    //URL取得
    if (eregi("(https?|ftp|news)(://[[:alnum:]\S\+\$\?\.%,!#~*/:@&=_-]+)", $movie_code)) {
        $movie_url_code = eregi_replace("(https?|ftp|news)(://[[:alnum:]\S\+\$\?\.%,!#~*/:;@&=_-]+)", "<>\\1\\2<>", $movie_code);
        $movie_url_code_split = explode("<>", $movie_url_code);
        $movie_url = $movie_url_code_split[1];
    }
   
    //width取得
    if($width != NULL){
        $width_value = 'width="'.$width.'"';
    }elseif (eregi('(width=?)("[0-9]+")', $movie_code)) {
        $width_code = eregi_replace('(width=?)("[0-9]+")', "<>\\1\\2<>", $movie_code);
        $width_code_split = explode("<>", $width_code);
        $width_value = $width_code_split[1];
       
    }
   
    //height取得
    if($height != NULL){
        $height_value = 'height="'.$height.'"';
    }elseif (eregi('(height=?)("[0-9]+")', $movie_code)) {
        $height_code = eregi_replace('(height=?)("[0-9]+")', "<>\\1\\2<>", $movie_code);
        $height_code_split = explode("<>", $height_code);
        $height_value = $height_code_split[1];
    }
   
    $w3c_code = '<object data="'.$movie_url.'" type="application/x-shockwave-flash" '.$width_value.' '.$height_value.'><param name="movie" value="'.$movie_url.'" /><param name="wmode" value="transparent" />'.$movie_title.'</object>';

    return $w3c_code;
}

youtubeCodeW3C関数の引数はそれぞれ以下の通りです。

  • $movie_code:Youtubeから取得した埋め込みコード
  • $movie_title:動画のタイトル(NULLでも可)
  • $width:動画の幅(NULLでも可)
  • $height:動画の高さ(NULLでも可)

サンプル

nandani | 2010年12月14日 | コメント(2) | トラックバック(0) | PHP関連

Copyright(c) 2010 - 2024 ダリの雑記