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

时间:2019-03-23 01:32:33

标签: php regex drupal-7 preg-match-all preg-grep

如果当前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: ?>

3 个答案:

答案 0 :(得分:3)

使用数组,但使用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

答案 1 :(得分:1)

使用数组并循环遍历.. 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
    }      
}

答案 2 :(得分:0)

有几种解决方案,例如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: ?>