【问题标题】:Check if URL is from a certain website检查 URL 是否来自某个网​​站
【发布时间】:2013-09-07 21:27:57
【问题描述】:

问题

用户可以提交一个表单,在该表单中他可以提交指向sitea.com 的链接。现在我要做的是检查用户是否真的提交了来自sitea.com的URL

我尝试过的

我尝试检查 URL 是否正确(使用正则表达式),并且包含 sitea.com。但这包含空白,因为任何人都可以将?haha=sitea.com 添加到 URL 并且仍然有匹配项。因为我不是正则表达式的大师,所以我的“解决方案”到此结束。

我的问题

是否可以检查$_POST['url'] 是否实际上是指向sitea.com 的链接?

【问题讨论】:

  • 您是否要检查表单输入是否包含sitea.com?或者是其他东西?请澄清
  • @AmalMurali 正是,用户提交的表单,他可以在其中复制/粘贴我需要来自 sitea.com 的 URL。
  • curl() 检查标题
  • 投反对票的人能解释一下原因吗?
  • @Thew:我没有投反对票,但我认为那是因为你的问题不是很清楚。 Is it possible to check if $_POST['url'] is actually and URL coming from sitea.com——这句话令人困惑。也许,您可以编辑问题并澄清一下?

标签: php regex url


【解决方案1】:

我认为这里最好parse_url()。正则表达式可能有效,但当内置函数可用时,最好避免使用正则表达式。

我会这样做:

$url = '...';
$domain = implode('.', array_slice(explode('.', parse_url($url, PHP_URL_HOST)), -2));

if ($domain == 'sitea.com') {
    # code...
}

作为一个函数:

function getDomain($url) 
{
    $domain = implode('.', array_slice(explode('.', parse_url($url, PHP_URL_HOST)), -2));
    if ($domain == 'sitea.com') {
        return True;
    } else {
        return False;
    }

}

测试用例:

var_dump(getDomain('http://sitea.com/'));
var_dump(getDomain('http://sitea.com/directory'));
var_dump(getDomain('http://subdomain.sitea.com/'));
var_dump(getDomain('http://sub.subdomain.sitea.com/#test'));

var_dump(getDomain('http://subdomain.notsitea.com/#dsdf'));
var_dump(getDomain('http://sitea.somesite.com'));
var_dump(getDomain('http://example.com/sitea.com'));
var_dump(getDomain('http://sitea.example.com/test.php?haha=sitea.com'));

输出:

bool(true)
bool(true)
bool(true)
bool(true)

bool(false)
bool(false)
bool(false)
bool(false)

Demo!

【讨论】:

    【解决方案2】:

    这可能不是正则表达式的工作,而是你选择的语言中的现有工具。正则表达式不是你对碰巧涉及字符串的每个问题挥舞的魔杖。您可能希望使用已经编写、测试和调试过的现有代码。

    在 PHP 中,使用 parse_url 函数。

    Perl:URI module.

    鲁比:URI module.

    .NET:'Uri' class

    【讨论】:

    • 是的,这行得通。使用sitea.com 和/或www.sitea.com 匹配主机名可以正常工作。
    猜你喜欢
    • 1970-01-01
    • 2018-09-26
    • 2022-11-21
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多