-2

问题

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

我试过的

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

我的问题

是否可以检查是否$_POST['url']实际上是一个链接sitea.com

4

2 回答 2

6

我觉得这里最好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)

演示!

于 2013-09-07T21:48:28.837 回答
3

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

在 PHP 中,使用该parse_url函数。

Perl:URI模块

红宝石:URI模块

.NET:“Uri”类

于 2013-09-07T21:32:22.713 回答