Bir URL herhangi bir bölümünü maç

4 Cevap

Herkes bana bir URL arama ve örneğin onun sonuca dayalı bir sınıf yazdırmak için nasıl anlamaya yardımcı olabilir:

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

Ne ben başarmak için çalışıyorum ilk isminden sonra "bahçe" demek bir dönem mathcing PHP kullanarak bir anahtar kullanıyor o bir sınıf basacaktır. Bu inşaat eşleşen ise farklı bir sınıf basacaktır. Orada sadece üç böylece i aramak için hangi kelimeleri biliyorum. Bu dinamik olmak zorunda değildir.

Herhangi bir yardım mutluluk duyacağız.

4 Cevap

Dinamik olmak zorunda değilse, bunu şöyle yapabiliriz:

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

}

Yukarıdaki oldukça açık olduğunu. Daha kompakt bir çözüm olabilir

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

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

Bu size ilk vermeyecektir word / sonra, ama sadece anahtar kelimeleriniz biri istenen URI olup olmadığını kontrol edin ve geri.

Ayrıca bu bileşenler içine URI bölünmüş ve path bileşeni, örneğin üzerinde Dize işlevleri ile çalışmak için parse_url kullanabilirsiniz

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

www.example.com/garden-design.html?foo=bar, bu size sadece bir kısmını vereceğini garden-design.html. Sizin senaryoda muhtemelen hala bunun üzerine stripos yaparım, böylece sen de iyi yerine onu ayrıştırma URL doğrudan yapabilirsiniz.

Ben yararlanarak parse_url muhtemelen iyi bir başlangıç ​​noktası olacağını sanırdım - yaparsın o explode yol bileşeni ve sonra bunu basitçe strpos karşılaştırmaları karşı Basit bir switch deyimi yeterli değilse, aradığınız üç dizeleri. (Kontrol etmek için emin olun! == False Eğer strpos rota aşağı giderseniz.)

Bu potentially regex tabanlı bir çözüm daha hızlı olacaktır.

Sen normal bir ifade deneyebilirsiniz:

. / Http:. \ / \ / Www..+ com \ / (bahçe | inşaat | kapalı) (tasarım) html /

sonra 1 $ size bahçe, inşaat ya da string gibi kapalı verecekti.

Ayrıca (.+) o noktada herhangi bir dize toplamak için kullanabilirsiniz.

Update yapımı "tasarım" isteğe bağlı.