如何检查 URL 是不是包含某些单词?

Posted

技术标签:

【中文标题】如何检查 URL 是不是包含某些单词?【英文标题】:How to check if URL contains certain words?如何检查 URL 是否包含某些单词? 【发布时间】:2019-03-23 01:32:32 【问题描述】:

如果当前 URL 包含某些单词,我想显示自定义内容。

到目前为止,如果 URL 仅包含单词“cart”,我可以使用下面的代码实现此目的。但是,我希望能够检查“博客”、“事件”和“新闻”等其他词。我该怎么办。

<?php $path = $_SERVER['REQUEST_URI'];
$find = 'cart';
$pos = strpos($path, $find);
if ($pos !== false && strstr($_SERVER['HTTP_REFERER'], 'path/to/site') !== false) : 
            ?>
  Custom content      
<?php else: ?>

【问题讨论】:

【参考方案1】:

使用数组,但改用preg_grep。 IMO 对于此用例,这是正确的 preg_ 函数。

preg_grep — 返回匹配模式的数组条目

 //www.example.com?foo[]=somewords&foo[]=shopping+cart

//for testing
$_GET['foo'] = ['somewords', 'shopping cart'];

$foo = empty($_GET['foo']) ? [] : $_GET['foo'];

$words = ['cart','foo','bar'];

$words = array_map(function($item)
             return preg_quote($item,'/');
        ,$words);

$array = preg_grep('/\b('.implode('|', $words).')\b/', $foo);

print_r($array);

输出

Array
(
    [1] => shopping cart
)

Sandbox

【讨论】:

【参考方案2】:

使用数组并循环遍历它.. IE

<?php $path = $_SERVER['REQUEST_URI'];
$arr = array();
$arr[0] = 'cart';
$arr[1] = 'foo';
$arr[2] = 'bar';

foreach($arr as $find)

   $pos = strpos($path, $find);
   if ($pos !== false && strstr($_SERVER['HTTP_REFERER'], 'path/to/site') !== false) 
      echo "custom content";
      break; // To exit the loop if custom content is found -- Prevents it showing twice or more
          

【讨论】:

感谢@Lawrence 的编辑。我对 ole 复制粘贴很着急!【参考方案3】:

preg_match_all()等几种解决方案:

代码

<?php $path = $_SERVER['REQUEST_URI'];
$find = '/(curt|blog|event|news)/i';
$number_of_words_in_my_path  = preg_match_all($find, $path);
if ($number_of_words_in_my_path > 0 && strstr($_SERVER['HTTP_REFERER'], 'path/to/site') !== false) : 
            ?>
  Custom content
<?php else: ?>

【讨论】:

以上是关于如何检查 URL 是不是包含某些单词?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP switch 语句检查字符串是不是包含单词(但也可以包含其他单词)?

检查句子是不是包含某些单词

如何快速检查 url 字符串是不是包含一个单词?

Javascript Regex 检查 URL 是不是包含一个单词并且不包含另一个单词

用于检查字符串是不是不应包含某些单词的正则表达式,但如果这些单词前面有“to”或“for”,则这些单词是可以的

如何检查句子是不是包含特定单词?