PHP [Img] BBCode,但仅在图像是真实图像时才显示?

时间:2012-03-19 00:04:12

标签: php regex image bbcode verify

在我的网站上,我在论坛上启用了BBCode,但是,我的一些用户一直在利用这一点,并且已经将图像的来源设为一个页面,为用户提供“尊重点数”。我想知道是否有办法检查[img]标签内的URL是否是真实图像,而不仅仅是网页。我认为“getimagesize”函数在这里很有用,但我找不到一种正确的方法来检查它是否是真实的图像并且能够在之后用正则表达式解析它。我不仅仅是检查文件扩展名,因为有些图片在我的网站上没有文件扩展名。对此有何见解?

1 个答案:

答案 0 :(得分:0)

getimagesize()是要走的路。它支持TIFF以及几乎所有流行的Web图像格式。我能想到的唯一例外是SVG。

除此之外,您还应设置黑名单以防止访问某些页面。

<?php
function validURL($url){
    $bad = array("respect.php","website.com","etc");
    /* Check each array element to see if it is in the URL */
    foreach($bad as $fail){
        if(strpos($url,$fail) !== FALSE){
            return false;
        }
    }
    return true;
}

if(validURL($url) && getimagesize($url) !== FALSE){
    // Valid image
} else {
    // Strip url
}
?>

这里的关键是如果validURL()返回false, if 语句将会短路。这将阻止getimagesize()访问任何顽皮的URL。