匹配URL的任何部分

时间:2009-12-21 12:07:54

标签: php

任何人都可以帮我弄清楚如何搜索网址并根据结果打印课程,例如:

http://www.?.com/garden-design.html

我想要实现的是使用PHP在第一个尾部斜杠之后使用PHP计算术语“garden”然后它将打印一个类。如果它符合结构,它将打印一个不同的类。只有三个,所以我知道要搜索哪些单词。这不一定是动态的。

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:0)

您可以尝试使用正则表达式:

/http://www..+.com/(园|建筑|室内)?( - 设计)的.html /

然后$ 1会给你花园,建筑或室内作为字符串。

你也可以使用(.+)来收集那个地方的任何字符串。

更新使“-design”可选。

答案 1 :(得分:0)

我认为使用parse_url可能是一个很好的起点 - 然后你可以explode路径组件,然后只需strpos对三个字符串进行比较你正在寻找,如果一个简单的开关声明是不够的。 (如果你沿着strpos路线走,请务必检查!== false。)

这可能可能比基于正则表达式的解决方案更快。

答案 2 :(得分:0)

看一下php函数strpos()。有了它,你可以做类似的事情:

$url  = "http://www.nothing.com/garden-design.html";
if (strpos($url, "/garden-design.html"))
    doSomething();
else if (strpos($url, "/construction-design.html"))
    doSomethingElse();
else if (strpos($url, "/indoor-design.html"))
    doSomethingElseInstead();

字符串匹配通常比正则表达式更快,更有效。

答案 3 :(得分:0)

如果它不必是动态的,你可以这样做:

switch(true)
{
    case stripos($_SERVER['REQUEST_URI'], 'garden'):
        return 'garden';
        break;
    case stripos($_SERVER['REQUEST_URI'], 'construction'):
        return 'construction';
        break;
    default:
        return 'default';
        break;

}

以上是非常明确的。更紧凑的解决方案可能是

function getCategory($categories)
{
    foreach($catgories as $category) {
        if stripos($_SERVER['REQUEST_URI'], $category) {
            return $category;
        }
    }
}

$categories = array('garden', 'construction', 'indoor');
echo getCategory($categories);

这不会在/之后为您提供第一个,而只是检查您所请求的URI中是否存在您的某个关键字并将其返回。

您还可以使用parse_url将URI拆分为其组件,并使用path组件上的字符串函数,例如。

$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

www.example.com/garden-design.html?foo=bar中,这只会为您提供garden-design.html部分。在您的场景中,您可能仍然会在其上执行stripos,因此您也可以直接在URL上执行此操作而不是解析它。