PHP: URL Verifikation

Dieses Thema PHP: URL Verifikation im Forum "Webentwicklung, Hosting & Programmierung" wurde erstellt von VoiD, 16. Okt. 2004.

Thema: PHP: URL Verifikation Habe schon im Internet (Google) gesucht aber nichts passendes gefunden. Vielleicht hat ja jemand was in der...

  1. Habe schon im Internet (Google) gesucht aber nichts passendes gefunden. Vielleicht hat ja jemand was in der Hinterhand oder eine gute Adresse.

    Ich suche ein PHP Skript zur Verifikation einer URL. Das Skript soll testen, ob es sich bei dem angebenen String um eine URL handelt. Als gültige URL's sollten folgende Angaben (mindestens) aktzeptiert werden:

    http(s)://www.domain.de
    http(s)://subdomain.domain.de
    http(s)://192.168.0.1 (also Eingabe als IP)

    Neben de sollen natürlich die anderen gültigen (wie com, biz.... usw) ebenfalls aktzeptiert werden.

    Hoffe, dass mir jemand helfen kann.

    Gruß
    VoiD
     
  2. Hier ist ein Beitrag im The PHP Ressource Forum. Da wird das diskutiert.

    Dafür verwendest du Reguläre Ausdrücke. Hier ist der entsprechende Artiekl auf php.net.
     
  3. ich hab im Netz folgenden Ausdruck zum überprüfen gefunden:

    Code:
    function vdCheckURL($url){
    return  preg_match(#^((http(s)?|ftp|news)://)+[a-z\d\.@_-]*[a-z\d@_-]+\.([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|shop)[a-z\d@\/\%\#\~\.\?=&,;_-]*$#i,$url);
    }
    
    Quelle: http://www.php-resource.de/forum/sh...;threadid=19016&highlight=URL+Validierung

    Leider verstehe ich zu wenig von den regulären Ausdrücken um es so erweitern / vervollständigen zu können, dass auch IP Adressen (also in der Form http://192.168.0.1) erkannt und aktzeptiert werden.

    Vielleicht hat jemand eine entsprechende Ergänzung / Vervollständigung zur Hand.
     
  4. Hi,
    das macht wenig Sinn diesen Ausdruck zu erweitern. Ich würde da eher einen zweiten Ausdruck nehmen, der die IP Adresse auf Gültigkeit überprüft. Dann guckst du, ob die Eingabe entweder dem Ausdruck oder dem der DNS Einträge gleich ist. Ist keins von beiden richig wurde offensichtlich eine falsche URL/ Nummer angegeben.

    P.S.: Ausdruck vergessen ;D

    /http:\/\/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/

    wenn mich meine grauen Zellen nicht im Stich lassen ;D
    Wobei dies nur für IPv4 gültig ist.

    // stimmt so nicht
    Für IPv6, falls interessant, müsstest du noch Optional die zwei letzen Drillinge hinten anhängen.
    Soll aber auch erstmal egal sein. Es reicht erstmal IPv4
     
  5. Hi

    @cledith
    Ipv6 sieht ein wenig anders aus als nur 2 mehr Zahlenblöcke ;)

    Gruß, Michael
     
  6. Hast man glatt Recht :D
    Ich hätte schwören können, dass ich die mal anders gelesen habe, also wie IPv4 nur um 2 Blöcke erweitert. Aber auch egal.

    Wen's interessiert: Hier der Eintrag in der dt. Wikipedia.
     
  7. Ich hab's jetzt mal folgdendermaßen zusammengesetzt:

    Code:
    function checkURL($url) {
      // Quelle:               [url]http://www.php-resource.de/forum/showthread.php?s=731389178d8ddca5b8918eaf9af1e2de&threadid=19016&highlight=URL+Validierung[/url]
      // Quelle (Inspiration): [url]http://www.wintotal-forum.de/?board=22;action=display;threadid=53252[/url]
      if(preg_match(#^((http(s)?|ftp|news)://)+[a-z\d\.@_-]*[a-z\d@_-]+\.([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|shop)[a-z\d@\/\%\#\~\.\?=&,;_-]*$#i,$url)==FALSE
        and preg_match(#^((http(s)?|ftp|news)://)+[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}#i,$url)==FALSE )
      {
        return FALSE;
      }
      return TRUE;
    }
    
    Findet das allgemeine Zustimmung oder ist es noch verbesserungswürdig?
     
  8. Also, wenn du es getestet hast und alles funktioniert, dann wird das wohl alles wunderbar sein ;D
     
  9. @Cledith
    ich war mir nicht sicher, ob der Ausdruck, denn Du mir angegeben hast, wirklich ein preg-Ausdruck war/ist. Ich hab in deshalb nach bestem Wissen angepassr ;)

    Ansonsten funktioniert meine Funktion.

    Besten Dank.
     
  10. Hi

    Dürfte nicht richtig sein, ich glaube http://http://..test.de würde auch gehen.

    Gruß, Michael