2012-04-15 43 views
1

は、私は次の文字列文字列から文字列を取得しますか?爆発?

<embed src='herp.com' width='240' height='180' allowscriptaccess='always' allowfullscreen='true' flashvars='volume=94&stretching=fill&file=http%3A%2F%2Fmedia.cdn.com%2FTHEMP%2Fflash%2Ffile.mp4&plugins=viral-1d'/> 

を持っていると私はそれのうちhttp%3A%2F%2Fmedia.cdn.com%2FTHEMP%2Fflash%2Ffile.mp4&plugins=viral-1dを取得したいです。

私は、=で爆発した後、第2最後の値をつかむが、(彼らはFlashVarsの変数スクリプトが希望もはや仕事の後に別のherp="blah"を追加する場合など)、これはエラーが発生しやすいかもしれ考えていたがある他の方法があります私は必要な文字列の周りの構文の変化に少し弾丸?

答えて

1

適切なHTML解析ライブラリを使用してHTMLを解析し、flashvars属性を<embed>タグから抽出するのが適切な方法です。これらのうちの1つしかない場合は、正規表現を使用することができます。

この式ではflashvars属性が取得され、その値はparse_str()に渡され、すべてのクエリ文字列コンポーネントが取得されます。 parse_str()urldecode()に電話するので、そうする必要はありません。

// Regex gets the entire flahsvars 
$pattern = "/<embed[^>]+flashvars='([^']+)'/"; 
preg_match($pattern, $embed, $matches); 

// $matches[1] now holds the full contents of `flashvars` 

// Then parse_str() on the result: 
$parts = array(); 
parse_str($matches[1], $parts); 
print_r($parts); 

// The part you want is in the file key: 
echo $parts['file']; 


Array 
(
    [volume] => 94 
    [stretching] => fill 
    [file] => http://media.cdn.com/THEMP/flash/file.mp4 
    [plugins] => viral-1d 
) 

使用する正規表現の説明:

/<embed[^>]+flashvars='([^']+)'/ 

それは最初以外の任意の文字終値>[^>]+)に続いて<embedを探します。 flashvars=のキャプチャグループは、flashvars属性の終わりの引用符までを含むすべての文字を検索し、最初のキャプチャグループ$matches[1]に格納します。

0

ことを行うには良い方法がありますが、見てみましょう:それは、URLのクエリ文字列を解析し

http://php.net/manual/en/function.parse-str.php

。あなたはもちろん、すべての余分なコンテンツを最初に削除する必要があります。正規表現を使ってクエリーストリングを抽出するだけです

+1

が強くけれども、その上に配列のparamを使用することをお勧め - 実はそれが完璧に動作します – ChrisK

+0

潜在的なセキュリティ上の問題を保存するために...私も余分なゴミを削除する必要はありません。 – Steven

+0

array paramはどういう意味ですか? – Steven

2
$str = "<embed src='herp.com' width='240' height='180' allowscriptaccess='always' allowfullscreen='true' flashvars='volume=94&stretching=fill&file=http%3A%2F%2Fmedia.cdn.com%2FTHEMP%2Fflash%2Ffile.mp4&plugins=viral-1d'/>"; 

// figure out where the params begin (keep the starting quote) 
$strpos = strpos($str, "flashvars=") + strlen("flashvars="); 
$str = substr($str, $strpos); 

// get the quoting char 
$delimiter = $str[0]; 

// first match strtok returns is our param list 
$str = strtok($str, $delimiter); 

parse_str($str, $params); 

var_dump($params); 
関連する問題