4

混合テキストからJPGPNG、またはGIFのURLpreg_match()を抽出して配列に配置するか、最後に最初のURLを格納するための構文などが必要です。

httpで始まり、jpg / png/gifで終わる文字列を検索する構文かもしれません。

私はそれがでできると信じていますpreg_match()

注:テキストは次のようになります:blablablabla " http://www.example.com/xxx.jpg " blablablabla

4

3 に答える 3

13

彼らが偽のマッチを挿入してあなたのサーバーをだますことができる特別な機会に注意してください。

例えば:

http://www.myserver.com/virus.exe?fakeParam=.jpg

または

http://www.myserver.com/virus.exe#fakeParam=.jpg

このケースを回避するために正規表現をすばやく変更しましたが、もっと多くの可能性があると確信しています(たとえば、ファイルのパスに%00を挿入するなど、正規表現で簡単に解析することはできません)。

$matches = array();
preg_match_all('!http://[^?#]+\.(?:jpe?g|png|gif)!Ui' , $string , $matches);

したがって、セキュリティのために、常に最も制限的な方法で正規表現を使用します。たとえば、サーバーを知っている場合は正規表現に書き込みます。パスに常に文字、ハイフン、ドット、スラッシュ、数字が含まれることがわかっている場合は、次のような1つの式:

$matches = array();
preg_match_all('!http://[a-z0-9\-\.\/]+\.(?:jpe?g|png|gif)!Ui' , $string , $matches);

これにより、将来の面白い驚きを避けることができます。

于 2010-01-26T23:51:18.663 に答える
5
$matches = array();
preg_match_all('!http://.+\.(?:jpe?g|png|gif)!Ui' , $string , $matches);
于 2010-01-26T22:48:02.620 に答える
3

オプションのプレフィックスhttp/httpsがある場合の更新、例:

http://example.com/image.jpg
https://example.com/image.jpg
//example.com/image.jpg
function extractImageUrlFromText($text) {
  preg_match_all('!(https?:)?//\S+\.(?:jpe?g|jpg|png|gif)!Ui', 
  $text, $matches);
  return $matches[0];
}
于 2016-07-07T02:29:40.827 に答える