соответствовать любой части URL - PullRequest
0 голосов
/ 21 декабря 2009

Может ли кто-нибудь помочь мне выяснить, как искать URL-адрес и распечатать класс на основе его результата, например:

http://www. ?. ком / сад design.html

То, чего я пытаюсь достичь, это использование переключателя, использующего PHP, для обозначения термина «сад» после первой косой черты, после чего он напечатает класс. Если бы это соответствовало конструкции, это напечатало бы другой класс. Есть только три, так что я знаю, какие слова искать. Это не должно быть динамическим.

Любая помощь будет оценена.

Ответы [ 4 ]

0 голосов
/ 21 декабря 2009

Если он не должен быть динамическим, вы можете сделать это так:

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 на его компоненты и работать с функциями String в компоненте path, например,

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

В www.example.com/garden-design.html?foo=bar это даст вам только часть garden-design.html. В вашем сценарии вы, вероятно, все равно сделаете на нем полоски, так что вы можете сделать это прямо на URL, а не анализировать его.

0 голосов
/ 21 декабря 2009

Я бы подумал, что использование parse_url, вероятно, будет хорошей отправной точкой - тогда вы можете explode компонент пути и затем просто strpos сравнения с тремя искомыми строками если простого оператора switch недостаточно. (Обязательно проверьте! == false, если вы идете по маршруту strpos.)

Это потенциально будет быстрее, чем решение на основе регулярных выражений.

0 голосов
/ 21 декабря 2009

Взгляните на функцию 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();

Сопоставление строк обычно выполняется быстрее и эффективнее, чем регулярные выражения.

0 голосов
/ 21 декабря 2009

Вы можете попробовать регулярное выражение:

..

/ http://www. + ком / (сад | строительство | закрытый) (- дизайн) ?. HTML /

тогда $ 1 даст вам сад, конструкцию или помещение в виде строки.

Вы также можете использовать (.+), чтобы собрать любую строку в этом месте.

Обновление сделало опцию "-design" необязательной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...