Bu nasıl PHP URL ayrıştırma işlevi neredeyse mükemmel yapmak için?

0 Cevap php

Bu fonksiyon büyük, ama ana kusur. Co.uk veya. Com.au. ile biten etki ele olmamasıdır Nasıl bu işlemek için modifiye edilebilir?

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;
}

Parse_url () başka bir şey arıyor benim nedenini netleştirmek için ben de (muhtemelen birden fazla) alt etki alanı dışında şerit istediğiniz olmasıdır.

print_r(parse_url('sub1.sub2.test.co.uk'));

Sonuçlar:

Array(
[scheme] => http
[host] => sub1.sub2.test.co.uk
)

Ne ayıklamak istiyorum "test.co.uk" (sans alt alanları), yani ilk parse_url kullanarak çıkış girdi olarak aynı olan bir anlamsız ekstra bir adımdır.

0 Cevap