2016-05-31 9 views
0

解析された値をチェックして他の値と一致するかどうかを調べ、その一致を返す関数を作成する必要があります。たとえば、私はビデオのURLを正しく照合しようとしています。だからそれがyoutubeの場合はこれを行うか、それがvimeoならこれを行うか、それが何もしなければならない。私は関数を作成する方法を知っていますが、私はparse_urlですか、解析するために使用するか分からないのですか?パラメータを渡し、戻り値を一致させる関数を作成する必要があります。php

私のテストケースでは、適切なパラメータを送信し、返された値が私が望むものと一致していることを確認する必要があります。 - あなたのケースで - それからホスト名を抽出

function get_video_embed_string($videostring) { 
     $video_url_parse = parse_url($videostring, PHP_URL_HOST); //get the input string ready to parse 
     $returnstring = ""; //default return string to empty string 

     if ($video_url_parse === 'vimeo.com') { 
      $returnstring = str_replace('vimeo.com', 'player.vimeo.com', $video_url_parse); 
     } else if ($video_url_parse === 'youtube.com') { 
      $returnstring = str_replace('youtube.com', 'youtube.com/embed/', $video_url_parse); 
     } else { 
      //do nothing 
     } 

     return $returnstring; 
} 

parse_str($returnstring); 

//now setup your test cases and see what echos out of the above method 

if ($returnstring === 'player.vimeo.com') { 
    echo "vimeo: <" . get_video_embed_string ("https://vimeo.com/abcdefg123") . ">"; 
} else if ($returnstring === 'youtube.com/embed/'){ 
    echo "youtube: <" . get_video_embed_string ("https://youtube.com/abcdefg123") . ">"; 
} else if($returnstring === ''){ 
    echo "nothing: <" . get_video_embed_string ("https://abc123.com/abcdefg123") . ">"; 
} else { 
    echo "empty:< " . get_video_embed_string ("") . ">"; 
} 
+0

、私は – lostInTheTetons

+0

アップそれらを設定するかどうかはわかりませんあなたが試したことを私たちに教えてください –

+0

私はコードを追加しました。正しいトラックにいるかどうかわかりません。新しいURLがあるように変数に新しいstr_replaceを追加できるかどうかもわかりません変数ではなく古いURL – lostInTheTetons

答えて

2

あなたは正しいトラックにparse_urlを使用していると思いますが、改善のための提案があります:

  • 代わりの実行のチェーンのelseif /場合、str_replaceは作業だけでなく、あなたが解析されたホストを交換しているためで、なぜ文字列を再検索するオーバーヘッドを費やしていませんswitch
  • を使用あなたがすでにそれを見つけたときに置き換える。
  • のユーザのコメントには、parse_urlのコメントには、解析されたURLを再構築するためのan excellent exampleがあります。これにより、ホスト名がurl(www.youtube.com/youtubevideo123)
  • の一部でもある文字列の置換を避けることができます。別のif/elseチェインチェックではなく、それぞれのケースで関数を呼び出すだけで簡単にテストケースを作成できます。

function get_video_embed_string($videostring) { 

    $video_url_parse = parse_url($videostring); //get the input string ready to parse 

    switch ($video_url_parse['host']) { 
     case 'vimeo.com': 
      $video_url_parse['host'] = 'player.vimeo.com'; 
      return unparse_url($video_url_parse); 
     case 'youtube.com': 
      $video_url_parse['host'] = 'youtube.com/embed'; 
      return unparse_url($video_url_parse); 
     default: 
      return unparse_url($video_url_parse); 
    } 

} 

function unparse_url($parsed_url) { 
    $scheme = isset($parsed_url['scheme']) ? $parsed_url['scheme'] . '://' : ''; 
    $host  = isset($parsed_url['host']) ? $parsed_url['host'] : ''; 
    $port  = isset($parsed_url['port']) ? ':' . $parsed_url['port'] : ''; 
    $user  = isset($parsed_url['user']) ? $parsed_url['user'] : ''; 
    $pass  = isset($parsed_url['pass']) ? ':' . $parsed_url['pass'] : ''; 
    $pass  = ($user || $pass) ? "[email protected]" : ''; 
    $path  = isset($parsed_url['path']) ? $parsed_url['path'] : ''; 
    $query = isset($parsed_url['query']) ? '?' . $parsed_url['query'] : ''; 
    $fragment = isset($parsed_url['fragment']) ? '#' . $parsed_url['fragment'] : ''; 
    return "$scheme$user$pass$host$port$path$query$fragment"; 
} 


//now setup your test cases and see what echos out of the above method 

echo "vimeo: <" . get_video_embed_string ("https://vimeo.com/abcdefg123") . ">\n"; 
echo "youtube: <" . get_video_embed_string ("https://youtube.com/abcdefg123") . ">\n"; 
echo "nothing: <" . get_video_embed_string ("https://abc123.com/abcdefg123") . ">\n"; 
echo "empty:< " . get_video_embed_string ("") . ">\n"; 

これは、ソースで次のように出力になります:たぶん、これはトライキャッチを使用することができ

vimeo: <https://player.vimeo.com/abcdefg123> 
youtube: <https://youtube.com/embed/abcdefg123> 
nothing: <https://abc123.com/abcdefg123> 
empty:< > 
2

parse_url()はURLとを解析するための非常に良いです:ここでは

は、私がこれまで試したものです。

あなたの例はちょっと混乱しています。 $returnstringは、関数の外部で定義されていません。 turn error reporting onする必要がありますので、この種のエラーメッセージNOTICEが表示されます。

あなたの関数は、ホスト名だけでなく、ビデオの埋め込みURLを返す必要があると仮定します。

function get_video_embed_string($videostring) { 
    $video_url_parse = parse_url($videostring, PHP_URL_HOST); //get the input string ready to parse 
    $returnstring = ""; //default return string to empty string 

    if ($video_url_parse === 'vimeo.com') { 
     $returnstring = str_replace('vimeo.com', 'player.vimeo.com', $videostring); 
    } else if ($video_url_parse === 'youtube.com') { 
     $returnstring = str_replace('youtube.com', 'youtube.com/embed', $videostring); 
    } else { 
     //do nothing 
    } 

    return $returnstring; 
} 

これはあなたに、この出力が得られます:つまり、あなたの$video_url_parse$videostringにない置き換える行う必要があります

echo get_video_embed_string("https://vimeo.com/abcdefg123"); // https://player.vimeo.com/abcdefg123 
echo get_video_embed_string("https://youtube.com/abcdefg123"); // https://youtube.com/embed/abcdefg123 
echo get_video_embed_string("https://abc123.com/abcdefg123"); // <empty string> 

を[より堅牢なアプローチのために、私はおそらくからのビデオIDを抽出しようとしますすべての既知の有効なURLスキームregexpを使用して、このIDを埋め込みURLに挿入してください]

+0

ありがとうございます。実際にWPからビデオIDを取り出し、新しいIDを新しい埋め込みURLに挿入する必要があります。だから私はこれを行うには正規表現を使用する? – lostInTheTetons

関連する問題