【问题标题】:Get only a specified url只获取指定的url
【发布时间】:2017-03-03 23:40:07
【问题描述】:

我只想检查完成的站点:*.test.com*.test1.com 我试过了:

if((preg_match('.\w+.test.com', $_SERVER['HTTP_ORIGIN'])) or (preg_match('.\w+.test1.com', $_SERVER['HTTP_ORIGIN']))){
}

【问题讨论】:

  • 试试 $urlcheck = expload("test.com",$_SERVER['HTTP_ORIGIN']); if(isset($urlcheck[1])) // 这意味着它有 test.com 所以你的代码放在这里。试试 test.com 和 *.test1.com
  • PHP 的正则表达式需要分隔符,php.net/manual/en/regexp.reference.delimiters.php。那些正则表达式应该一直在抛出错误。

标签: php regex


【解决方案1】:

对于初学者,您需要最可靠的方法来分解任何给定的网址。为此,您可以使用 PHP 的 built-in parse_url function:

$host = parse_url($url, PHP_URL_HOST);

然后,您要检查它是否以test.comtest1.com 结尾,您可以使用正则表达式:

if (preg_match('/test1?\.com$/', $host)) {
    //match
}

正则表达式的工作方式如下:

  • test:匹配字符串文字 "test"
  • 1?:匹配文字1,但它是可选的,所以testtest1 都会匹配
  • \.:文字点匹配
  • com: com 的文字匹配
  • $:字符串结束。只有当test.comtest1.com 中的字符串结束 时,表达式才会匹配。

只是一个警告:$_SERVER['HTTP_ORIGIN'],事实上几乎没有一个$_SERVER 值是值得信任的。您可以在此处阅读有关该主题的更多信息(+ 链接页面)

How secure is HTTP_ORIGIN?

【讨论】:

    【解决方案2】:

    你可以使用 str_pos。 str_pos 将在字符串、链接、url 中搜索。 文档link

    这是一个小例子

    if(strpos($_SERVER['HTTP_ORIGIN'], 'test.com') !== false) {
        echo "found it";
    }
    

    【讨论】:

    • 您没有检查test1.com。您试图编辑我的答案:请再次阅读问题:OP 想要检查 "test.com" and “test1.com”。除了test1 没有被检查。如果我拥有像 "com.org" 之类的域,并且有一个 "test" 子域,那么您的支票将不会接受 HTTP_ORIGINtest.com.org跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多