Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 限制表单submithion中的url地址_Php_Forms_Limit - Fatal编程技术网

Php 限制表单submithion中的url地址

Php 限制表单submithion中的url地址,php,forms,limit,Php,Forms,Limit,我在joomal 2.5中通过rsform pro创建了一个表单 我想在一个字段中禁止几个url地址 我使用这个代码 if(isset($_POST['form']['link'])) { $bad = array('ebooks.com','suprbay.org'); if(in_array($_POST['form']['link'],$bad)) { $redirectLink = 'index.php?option=com_rsform&formId='.$fo

我在joomal 2.5中通过rsform pro创建了一个表单 我想在一个字段中禁止几个url地址 我使用这个代码

    if(isset($_POST['form']['link']))
{
$bad = array('ebooks.com','suprbay.org');
if(in_array($_POST['form']['link'],$bad))
{
    $redirectLink = 'index.php?option=com_rsform&formId='.$formId;
    $RSadapter->redirect($redirectLink,'this url limited');
}
}
当用户准确地使用“ebooks.com”或“suprbay.org”时,但当用户使用 “www.suprbay.org”或“”或当使用该选项时,再加上此代码不起作用的所有内容

当url包含代码工作的主域时,我去了 请帮帮我 谢谢你可以试试

$value = htmlspecialchars($_POST['form']['link']); // convert special characters
// note that you should'nt use $_POST
// joomla has it's own way to get request variables
// use JFactory::getApplication('site')->input->get('form', array(), 'post', 'array');
// this will return form array which you can work with

foreach($bad as $site)
{
    if(strposi($value, $site) !== false)
    {
        // value contains one of invalid links
    }
}

要找到URL的域,需要对其进行解析,而从头开始并不完全是一件小事。有一个有用的PHP函数,它将为您完成这项工作

$parse_result = parse_url($_POST['form']['link']);
$link_domains = explode('.', $parse_result['host']);
$length = count($link_domains);
$link_main_domain = $link_domains[$length - 2].'.'.$link_domains[$length - 1];
然后您只需像以前一样将
$link\u main\u domain
$bad
数组进行比较

基本上,
parse_url
返回完整的域字符串。例如“subdomain.domain.tld”。代码的其余部分只是获取该域的最后两段

一个更简单的解决方案是只在链接中搜索要避免的域,但这并不能解释它出现在URL中而不是主机段中


请记住,您无法确定链接指向何处。它可能会将某人转发到一个“坏”网站,不管它自己的域名是什么。

另一方面,如果用户是恶意的,他们可以使用像tinyurl.com这样的url缩短器来绕过这个限制。需要记住的是。$bad=array('ebooks.com','suprbay.org');foreach($badsite){if(strstrstr($_POST['form']['link'],$badsite)){$redirectLink='index.php?option=com_rsform&formId='.$formId;$RSadapter->redirect($redirectLink,'this url limited');break;}
$parse_result = parse_url($_POST['form']['link']);
$link_domains = explode('.', $parse_result['host']);
$length = count($link_domains);
$link_main_domain = $link_domains[$length - 2].'.'.$link_domains[$length - 1];