Мне нужен синтаксис preg_match()
или что-то подобное, чтобы извлекать URL-адреса JPG или PNG или GIF из смешанного текста и помещать их в массив или, наконец, хранить первый URL-адрес.
возможно, некоторый синтаксис, который ищет строки, начинающиеся с http и заканчивающиеся jpg / png / gif ..
Я считаю, что это можно сделать с помощью preg_match()
Примечание: текст может быть таким: blablablabla " http://img.ruphp.com/php/xxx.jpg " blablablabla
Обратите внимание на особые случаи, когда они могут обмануть ваш сервер, вставляя поддельные матчи.
Например:
http://img.ruphp.com/php/virus.exefakeParam=.jpg
Или
http://img.ruphp.com/php/virus.exe
Я быстро модифицировал регулярное выражение, чтобы избежать таких случаев, но я уверен, что может быть больше (например, вставка% 00 в путь файла, например, и не может быть легко проанализирована с помощью регулярных выражений)
$matches = array(); preg_match_all('!http://[^?#]+\.(?:jpe?g|png|gif)!Ui' , $string , $matches);
Таким образом, для обеспечения безопасности всегда используйте регулярное выражение наиболее ограничительным способом, например, если вы знаете сервер, записываете его в регулярное выражение или знаете, что путь всегда будет содержать буквы, дефисы, точки, косые черты и цифры, используйте одно выражение:
$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 optional, например:
http://example.com/image.jpg http://img.ruphp.com/php/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]; }