Я хотел бы найти регулярное выражение, которое могло бы найти (в заданном HTML) следующие изображения:
- Те, которые захвачены в:
src=""
- Те, которые захвачены в:
src=''
- Захваченные в:
background=""
- Захваченные в:
background=''
- Захваченные в:
url("")
- Захваченные в:
url('')
- Те, кто был захвачен в:
url()
До сих пор я придумал:
preg_match_all("/src=((\"|'|)?(.*\.(png|gif|jpg))(\"|'|))/Ui", $strHTML, $arrMatches);
preg_match_all("/background=((\"|'|)?(.*\.(png|gif|jpg))(\"|'|))/Ui", $strHTML, $arrMatches);
preg_match_all("/url\((\"|'|)?((.*\.(png|gif|jpg))(\"|'|))\)/Ui", $strHTML, $arrMatches);
Но они неполны в том, что они надеваютНе включайте префикс (src / background / url).Кроме того, с точки зрения безопасности, я думаю, что они могут быть улучшены и дальше, чтобы кто-то не мог войти src="http://somesite.com/someurl.exe?ext=jpg"
Любая помощь в правильном направлении приветствуется.
edit:
Я думаю, что получил, хотя код, безусловно, можно улучшить, возможно, даже объединить и / или оптимизировать :) 1038
/* match CSS url() links */
preg_match_all("/(url\((\"|'|)(.*\.(png|gif|jpg|jpeg))(\"|'|)\))/Ui", $strHTML, $arrMatches);
Array
(
[0] => Array
(
[0] => url('test1.gif')
[1] => url(test2.gif)
[2] => url("test3.gif")
)
[1] => Array
(
[0] => url('test1.gif')
[1] => url(test2.gif)
[2] => url("test3.gif")
)
[2] => Array
(
[0] => '
[1] =>
[2] => "
)
[3] => Array
(
[0] => test1.gif
[1] => test2.gif
[2] => test3.gif
)
[4] => Array
(
[0] => gif
[1] => gif
[2] => gif
)
[5] => Array
(
[0] => '
[1] =>
[2] => "
)
)
/* match img links */
preg_match_all("/(src=(\"\'??)(.*\.(png|gif|jpg|jpeg))(\"\'??))/Ui", $strHTML, $arrMatches);
/* match background links */
preg_match_all("/(background=(\"\'??)(.*\.(png|gif|jpg|jpeg))(\"\'??))/Ui", $strHTML, $arrMatches);