【问题标题】:regex url to image in php正则表达式 url 到 php 中的图像
【发布时间】:2011-01-19 12:03:36
【问题描述】:

我正在制作个人资料页面,用户可以在其中设置个人资料图片的网址。例如,如何使用正则表达式检查这一点?

【问题讨论】:

  • 您到底打算“检查”什么?标准是什么?

标签: php regex security validation url


【解决方案1】:

您可以使用 cURL 作为 mime。对于 URL 验证,我使用以下内容,但那里有很多负载。您可以使用FILTER_VALIDATE_URL,但它可能包含错误; http://bugs.php.net/51192.

$url='image.png';

if( preg_match("#((http|https|ftp)://(\S*?\.\S*?))(\s|\;|\)|\]|\[|\{|\}|,|\"|'|:|\<|$|\.\s)#ie", $url) ){

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_REFERER, 'http://yoursite.com');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_NOBODY, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_exec($ch);
    $mime = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
    curl_close($ch);

    print $mime;

}

【讨论】:

  • preg_match 似乎阻止了像“itavisen.no/gfx/speedometerNy.png”这样的有效网址
  • 我已经更新了它,因为它还有一些其他错误。我通常更喜欢 URL 以 HTTP 为前缀。个人偏好 :) 但我将它用于将放置在 HTML 基本标记的 href 中的 URL。
【解决方案2】:

你不能。任何文件都可以在任何地址提供。您需要检查 URL 返回的 Content-Type,可能还需要检查图像的格式。

【讨论】:

【解决方案3】:

【讨论】:

    【解决方案4】:

    您可以使用FILTER_VALIDATE_URL

    看:parsing url - php, check if scheme exists, validate url regex

    【讨论】:

      【解决方案5】:

      第一个测试是 filter_var() 的有效 url

      $url = filter_var($variable, FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED);
      

      然后你需要下载资源,并在本地测试它是否是图像。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-17
        • 1970-01-01
        • 2014-04-23
        • 2018-09-15
        • 2016-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多