PHP - tam url ayrıştırıcı yardım

2 Cevap php

Ben etkili bir url çözümleyici bulmaya çalışıyorlar, PHP'nin kendi alanı veya uzantısı içermez. Php.net kullanıcıların bir dizi katkıda bulundu ve bu yapmıştı:

function parseUrl($url) {
    $r  = "^(?:(?P<scheme>\w+)://)?";
    $r .= "(?:(?P<login>\w+):(?P<pass>\w+)@)?";
    $r .= "(?P<host>(?:(?P<subdomain>[-\w\.]+)\.)?" . "(?P<domain>[-\w]+\.(?P<extension>\w+)))";
    $r .= "(?::(?P<port>\d+))?";
    $r .= "(?P<path>[\w/]*/(?P<file>\w+(?:\.\w+)?)?)?";
    $r .= "(?:\?(?P<arg>[\w=&]+))?";
    $r .= "(?:#(?P<anchor>\w+))?";
    $r = "!$r!";                                                // Delimiters

    preg_match ( $r, $url, $out );

    return $out;
}

'-' Ne yazık ki bir ile yolları üzerinde başarısız olur ve ben nasıl kabul edecek şekilde değiştirilmesi için bana yaşam egzersiz için olamaz '-' in yol adı.

Teşekkürler

2 Cevap

Bu deneyin ...

function parseUrl($url) {
    $r  = "^(?:(?P<scheme>\w+)://)?";
    $r .= "(?:(?P<login>\w+):(?P<pass>\w+)@)?";
    $r .= "(?P<host>(?:(?P<subdomain>[-\w\.]+)\.)?" . "(?P<domain>[-\w]+\.(?P<extension>\w+)))";
    $r .= "(?::(?P<port>\d+))?";
    $r .= "(?P<path>[\w/-]*/(?P<file>[\w-]+(?:\.\w+)?)?)?";
    $r .= "(?:\?(?P<arg>[\w=&]+))?";
    $r .= "(?:#(?P<anchor>\w+))?";
    $r = "!$r!";

    preg_match ( $r, $url, $out );

    return $out;
}

i yolu ve dosya tire eklendi

Bu mevcut parse_url işlevi kullanmak ve ardından 'ev sahibi' dizinden subdomain'i ayrıştırma çok daha kolaydır.

Örnek:

$url = 'http://username:password@subdomain.hostname.tld/path?arg=value#anchor';
$urlInfo = parse_url($url);
$host = $urlInfo['host'];
$subdomain = substr($host, 0, strpos($host, '.'));
$tld = substr($host, strrpos($host, '.') + 1);