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番目の最後の値を取得することを考えていましたが、これはエラーが発生しやすい可能性があります(たとえばherp="blah"、flashvars変数の後に別の値を追加すると、スクリプトは機能しなくなります)、構文に対してもう少し防弾である他の方法はありますか?私が必要とする文字列の周りの変更?

4

3 に答える 3

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);
于 2012-04-15T16:58:04.847 に答える
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]

于 2012-04-15T16:56:17.730 に答える
0

それを行うためのより良い方法があります。以下をご覧ください。

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

URL のクエリ文字列を解析します。もちろん、最初に余分なコンテンツをすべて削除する必要があります。正規表現でクエリ文字列を抽出するだけです

于 2012-04-15T16:51:48.983 に答える