0

我在 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”或“ http://www.ebooks.com/635228/you-losing-weight/ ”时,此代码为真roizen-michael-f-oz-mehmet-c/ " 或者当使用它加上这个代码不起作用的所有东西

当 url 包含代码工作的主域时,我去了请帮助我,谢谢

4

3 回答 3

0
        foreach ($bad as $badsite){
            if (stristr($_POST['form']['link'],$badsite)){
                $redirectLink = 'index.php?option=com_rsform&formId='.$formId;
                $RSadapter->redirect($redirectLink,'this url limited');
                break;
            }
        }
于 2013-07-24T11:53:45.503 回答
0

你可以试试

$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
    }
}
于 2013-07-24T12:03:08.303 回答
0

要查找 URL 的域需要对其进行解析,而且从头开始并不是一件容易的事。有一个有用的 PHP 函数parse_url会为您完成。

$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_main_domain与你的$bad数组进行比较。

基本上parse_url返回(除其他外)完整的域字符串。例如'subdomain.domain.tld'。其余的代码只取该域的最后两段。

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

请记住,您无法确定链接的去向。无论它自己的域是什么,它都可能将某人转发到“坏”站点。

于 2013-07-24T12:06:08.027 回答