混合テキストからJPG、PNG、またはGIFのURLpreg_match()
を抽出して配列に配置するか、最後に最初のURLを格納するための構文などが必要です。
httpで始まり、jpg / png/gifで終わる文字列を検索する構文かもしれません。
私はそれがでできると信じていますpreg_match()
注:テキストは次のようになります:blablablabla " http://www.example.com/xxx.jpg " blablablabla
混合テキストからJPG、PNG、またはGIFのURLpreg_match()
を抽出して配列に配置するか、最後に最初のURLを格納するための構文などが必要です。
httpで始まり、jpg / png/gifで終わる文字列を検索する構文かもしれません。
私はそれがでできると信じていますpreg_match()
注:テキストは次のようになります:blablablabla " http://www.example.com/xxx.jpg " blablablabla
彼らが偽のマッチを挿入してあなたのサーバーをだますことができる特別な機会に注意してください。
例えば:
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);
これにより、将来の面白い驚きを避けることができます。
$matches = array();
preg_match_all('!http://.+\.(?:jpe?g|png|gif)!Ui' , $string , $matches);
オプションのプレフィックス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];
}