>问题
用户可以提交一个表单,他可以在其中提交指向sitea.com
的链接。现在我想做的是检查用户是否真的提交了来自sitea.com
的 URL
我尝试过什么
我试图检查 URL 是否正确(使用正则表达式),并包含sitea.com
.但这包含空白,因为任何人都可以向 URL 添加?haha=sitea.com
并且仍然有匹配项。因为我不是正则表达式大师,我的"解决方案"到此结束。
我的问题
是否可以检查$_POST['url']
是否实际上是指向sitea.com
的链接?
我认为最好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)
演示!
这可能不是正则表达式的工作,而是您选择的语言中的现有工具的工作。 正则表达式不是一根魔杖,你可以在碰巧涉及字符串的每个问题上挥舞。您可能希望使用已编写、测试和调试的现有代码。
在 PHP 中,使用 parse_url
函数。
Perl:URI
模块。
Ruby:URI
模块。
.NET:"Uri"类