By_Engine
@By_Engine

Как парсить bb код изображения?

Какие варианты парсинга есть кроме
preg_replace('/\[img=(.+)\]/', '<img src="$1">', $text)

И тому подобных вариантов?

Дело в том, что этот код уязвим. Пытался проверить изображение с помощью функции preg_replace_callback и примерно такого кода
if (@imagecreatefromstring(file_get_contents($arr[1]))){
	return 'гуд';		
}else{
	return 'не гуд';	
}

Но при большом количестве тегов-картинок очень долго грузит. Как можно еще проверить изображение?
  • Вопрос задан
  • 2462 просмотра
Пригласить эксперта
Ответы на вопрос 4
На некоторых форумах не разрешают вставлять изображения, в ссылках которых есть GET параметры, в других проверяют чтоб ссылка заканчивалась на \.(jpe?g|png|gif), но это все защита от дурака, при желании ничего не стоит расположить картинку с любым именем у себя на сервере, а потом сделать 30х редирект на любой урл. Так что так...
Ответ написан
Комментировать
FanatPHP
@FanatPHP
Чебуратор тега РНР
Зачем?
Ответ написан
Комментировать
By_Engine
@By_Engine Автор вопроса
Нашел функцию getimagesize. Она возвращает данные изображения. Если файл не является изображением, возвращает Notice: Read error
Ответ написан
stweet
@stweet
Java, Php, Js
$routput = "Bad code!";
$ioutput = "<img src='%s'/>";
$pattern = "/^\[[img|IMG]+=\'(.*).(jpg|png|gif)\'\]\$/";
$allowed = array("image/jpeg", "image/png", "image/gif");
$bbimage = "[IMG='http://www.hdiphonewallpapers.us/phone-wallpapers/phone/12963B64236440-2J38.jpg']";

if (preg_match($pattern, $bbimage)) {
	
	try {
		$path = preg_replace($pattern, "$1.$2", $bbimage);
		$size = getimagesize($path);
		
		$mime = (string) $size['mime'];
		
		if ($mime && in_array($mime, $allowed, true)) {
			$routput = sprintf($ioutput, $path);
		}
		
	} catch (Exception $e) {}
}

echo $routput;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы