【问题标题】:Using preg_match and str_replace to verify link使用 preg_match 和 str_replace 验证链接
【发布时间】:2013-08-02 06:23:54
【问题描述】:

我正在构建一个简单的博客脚本,允许用户将 html 放入内容中(我正在使用 htmlpurifier)。我希望用户能够发布图片网址,但只能来自 imgur。我怎样才能最好地使用 preg_match 和 str_replace 来处理这种方法?

示例。如果图片 url 不是来自 imgur,则使用 str_replace 并将其删除。


在玩弄了 DOMDocument(Jack 在聊天中建议改用 DOM)之后,我想出了自己问题的解决方案。

// let's pretend <img src="" /> is inside content
$content = $_POST['content'];

$doc = new DOMDocument;
libxml_use_internal_errors(true);
$doc->loadHTML($content);
libxml_clear_errors();

foreach ($doc->getElementsByTagName('img') as $img) {
    if (parse_url($img->getAttribute('src'), PHP_URL_HOST) != 'i.imgur.com') {
    $content = preg_replace("/<img[^>]+\>/i", "(invalid image provider) ", $content); 
    echo $content;
    } else {
        echo $content;
    }
}

【问题讨论】:

  • 你有没有尝试过这个?如果有,请出示。
  • 这样的东西能胜任吗?if(!preg_match('/http:\/\/i\.imgur\.com[^&]+/', $url)) { $ err = '无效'; }
  • 分享您的研究对每个人都有帮助。告诉我们您尝试了什么以及为什么它不能满足您的需求。这表明您已经花时间尝试帮助自己,它使我们免于重复明显的答案,最重要的是它可以帮助您获得更具体和相关的答案!
  • 感谢您鼓励我深入挖掘并自己解决问题,呵呵。我分享了我的解决方案,以防将来有人有同样的问题。干杯

标签: php


【解决方案1】:

假设您有网址:

$host = parse_url($url, PHP_URL_HOST);
$suffix = 'imgur.com';
if (substr_compare($host, $suffix, -strlen($suffix)) != 0) {
    // not an imgur.com link
}

【讨论】:

    猜你喜欢
    • 2018-11-29
    • 2016-09-06
    • 1970-01-01
    • 2011-07-11
    • 2011-02-02
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    相关资源
    最近更新 更多