Avatar billede olinuxo Nybegynder
03. juni 2010 - 22:04 Der er 13 kommentarer og
1 løsning

Brug preg_match til at finde url & lokal path

Hej eksperter.

Kan nogen hjælpe mig med at lave to preg_match-funktioner.

Den ene skal finde domænenavnet, den anden den lokale path til en fil/mappe, hvis den findes i stringen.

Eksempel 1:
String: http://www.eksperten.dk/spm/opret
Domænenavn: "eksperten.dk"
Lokal path: "/spm/opret"

Eksempel 2:
String: www.eksperten.dk
Domænenavn: "eksperten.dk"
Lokal path: "/"

Domænet skal som udgangspunkt vises uden "http://www" og den lokale sti/mappe skal starte med en "/".

Kan nogen hjælpe med udførsel af preg_match-funktioner til ovenstående?

På forhånd tak.
Avatar billede arne_v Ekspert
03. juni 2010 - 22:07 #1
Var det ikke bedre at bruge parse_url funktionen fremfor regex?
Avatar billede jakobdo Ekspert
03. juni 2010 - 22:08 #2
Avatar billede arne_v Ekspert
03. juni 2010 - 22:15 #3
Eksempel:

<?php
function test($url) {
    if(strpos($url, '://') === FALSE) {
        $url = 'http://' . $url;
    }
    $parts = parse_url($url);
    if(!isset($parts['path'])) {
        $parts['path'] = '/';
    }
    echo 'Host : ' . $parts['host'] . "\r\n";
    echo 'Path : ' . $parts['path'] . "\r\n";
}

test('http://www.eksperten.dk/spm/opret');
test('www.eksperten.dk');
Avatar billede olinuxo Nybegynder
03. juni 2010 - 22:19 #4
Arne, det ser lovende ud.. Den returnere Host med "www." foran, hvordan ville du fjerne den?
Avatar billede olinuxo Nybegynder
03. juni 2010 - 22:29 #5
Fiksede den.. Smed en str_replace-funktion ind i mellem.. :-) Tak for hjælpen. Smid et svar!
Avatar billede arne_v Ekspert
03. juni 2010 - 22:35 #6
Mit forslag:

<?php
function domain($host) {
    $parts = array_reverse(explode('.', $host));
    if($parts[0] == '.uk' || $parts[0] == '.jp') { // insert more countries with that domain structure
        return $parts[2] . '.' . $parts[1] . '.' . $parts[0];
    } else {
        return $parts[1] . '.' . $parts[0];
    }
}

function test($url) {
    if(strpos($url, '://') === FALSE) {
        $url = 'http://' . $url;
    }
    $parts = parse_url($url);
    if(!isset($parts['path'])) {
        $parts['path'] = '/';
    }
    echo 'Host : ' . $parts['host'] . "\r\n";
    echo 'Domain : ' . domain($parts['host']) . "\r\n";
    echo 'Path : ' . $parts['path'] . "\r\n";
}

test('http://www.eksperten.dk/spm/opret');
test('www.eksperten.dk');
Avatar billede arne_v Ekspert
03. juni 2010 - 22:35 #7
Det kan nemlig godt vaere andet end 'www.' og der kan ogsaa godt vaere mere end 3 led.
Avatar billede arne_v Ekspert
03. juni 2010 - 22:35 #8
svar
Avatar billede olinuxo Nybegynder
03. juni 2010 - 22:40 #9
Hvad er det "domain" helt præcis gør mht. uk og jp?
Avatar billede olinuxo Nybegynder
03. juni 2010 - 22:49 #10
Jeg har fattet budskabet mht. uk og jp :-) Der er lidt stof til eftertanke mht. til opbygning af domæne.

Tusind tak for hjælpen :-)
Avatar billede arne_v Ekspert
03. juni 2010 - 22:50 #11
Et firma BigBiz faar forskellige domaener forskellige steder:

Danmark - bigbiz.dk
USA - bigbiz.com
Tyskland - bigbiz.de
Frankrig - bigbiz.fr
o.s.v.

Men enkelte lande har en anden struktur!

England - bigbiz.co.uk
Japan - bigbiz.co.jp
Avatar billede arne_v Ekspert
03. juni 2010 - 22:52 #12
Avatar billede olinuxo Nybegynder
03. juni 2010 - 23:12 #13
Tak for forklaringen. Jeg har umiddelbart besluttet at bruge HOST da jeg ellers vil fjerne evt. subdomæne, hvilket min kode gerne stadig skulle se det som, altså:

http://bruger1.gratishost.dk
http://bruger2.gratishost.dk
http://www.gratishost.dk

www. er jo også et "subdomæne" ?
Avatar billede arne_v Ekspert
04. juni 2010 - 00:10 #14
Fuldstaendigt. www er bare en konvention man valgte for lidt over 15 aar siden.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester