Hendrik: In Zeichenkette nach ersten Zeichen suchen, oder: URL richtig?

Hallo!

Ich habe ein Gästebuch auf meiner Homepage und biete den Besuchern an, ihre Homepage-URL anzugeben. Nun habe ich also das Homepage-Feld schon mit http:// vorbelegt.

Allerdings können meine Besucher natürlich dieses http:// löschen, und stattdessen einfach mal "eierkopf" eingeben.

Damit ich dies vermeiden kann, möchte ich zumindest prüfen, ob die ersten 7 Zeichen http:// lauten.

Am besten wäre natürlich ein Script zur Überprüfung der Syntax der Domain. Oder gibt es sogar eine Funktion, die Überprüft, ob es bei der angegebenen Adresse einen antwortenden Server gibt? Also eine Funktion, die sozusagen mal "testweise" auf diese Adresse geht? Ich glaube nämlich, ich habe da mal sowas bei php.net gesehen?!

Wäre über eine Antwort erfreut.

Hendrik

  1. Hallo,

    $d=[link:http://de3.php.net/manual/de/function.parse-url.php@title=parse_url]($_POST['eingabe_url']);  
    $r=@[link:http://de3.php.net/manual/de/function.dns-get-record.php@title=dns_get_record]($d['host']);  
    [link:http://de3.php.net/manual/de/language.control-structures.php#control-structures.if@title=if]([link:http://de3.php.net/manual/de/function.substr.php@title=substr]([link:http://de3.php.net/manual/de/function.strtolower.php@title=strtolower]($d['scheme']),0,4)=='http' && // kann also auch https sein  
       ![link:http://de3.php.net/manual/de/function.empty.php@title=empty]($r)){                                    // domain existiert  
         verarbeite_url();  
    }
    

    Gruß aus Berlin!
    eddi

    1. Hey eddi!

      Irgentwas ist daran doch fehlerhaft, oder?
      Wie soll ich denn dann die Eingabe weiter überprüfen? Könntest du mir ein Beispiel geben?

      Danke für deine Hilfe!

      Hendrik

      1. Hallo,

        Irgentwas ist daran doch fehlerhaft, oder?
        Wie soll ich denn dann die Eingabe weiter überprüfen? Könntest du mir ein Beispiel geben?

        dns_get_record() ist erst ab der Version 5.0 verfügbar und bei verarbeite_url() ist Dein Hirn gefragt eine Verarbeitung vorzunehmen. Sonst sehe ich auch erstmal nicht, wo Du Schwierigkeiten bei der Abstraktion zu Deinem Problem hast.

        Gruß aus Berlin!
        eddi

        1. Hey!

          Bei mir bleibt bei diesem code zum Beispiel immer alles weiß!

            
          $d=parse_url($_POST['homepage']);  
          $r=@dns_get_record($d['host']);  
          if(substr(strtolower($d['scheme']),0,4)=='http' && // kann also auch https sein  
             !empty($r)){                                    // domain existiert  
          /*kann ich keine Anweisung hinschreiben, da wenn Adresse richtig, soll alles normal weiterlaufen*/  
          }  
          else{  
          echo "Dies ist keine Internetadresse!";  
          }  
          
          

          Hendrik

          P.S. Hab nur Version 4.4.2! Liegt's dann daran? Das wäre echt scheiße!

          1. Hallo,

            Hab nur Version 4.4.2! Liegt's dann daran?

            ja.

            Gruß aus Berlin!
            eddi

            1. Hey!

              Hab nur Version 4.4.2! Liegt's dann daran?

              ja.

              Ja toll! Was soll ich denn dann machen? Gibt es eine Alternative?

              Hendrik

              1. Hallo,

                Was soll ich denn dann machen? Gibt es eine Alternative?

                zum einen hatte Dir Johannes einen Verweis auf einen entsprechenden Perl-Code gepostet, der zwar nur formal die Syntax validiert, aber nichts über die Erreichbarkeit einer URL oder dessen Domain aussagt. Zum anderen hast Du neben der Möglichkeit, Dir einen Provider mit Versionsunterstützung für 5.x zu suchen, auch noch verschiedene andere Alternativen.

                Du könntest mit der Funktion fopen() mit einem herabgesetzten default_socket_timeout prüfen, ob die URL erreichbar ist. (Dies kann aber durch eine entsprechende Konfiguration mit allaw_url_fopen=Off scheitern.)

                Du könntest mit den Netzwerkfunktionen via HTTP einen HEAD-Request machen. Die Funktion fsockopen() liefert in der Beschreibung gleich eine passendes Beispiel mit.

                Du könntest ebenfalls über die Netzwerkfunktionen auch eine DNS-Abfrage veranstalten. In den "User Contributed Notes" der Funktion getmxrr() findest Du dazu eine Klasse, die Du etwas anpassen müßtest.

                Gruß aus Berlin!
                eddi

                1. Hey!

                  Vielen Dank für die vielen Möglichkeiten. Ich denke, die Möglichkeit von Johannes probiere ich mal...

                  Was soll ich denn dann machen? Gibt es eine Alternative?

                  zum einen hatte Dir Johannes einen Verweis auf einen entsprechenden Perl-Code gepostet, der zwar nur formal die Syntax validiert, aber nichts über die Erreichbarkeit einer URL oder dessen Domain aussagt.

                  Ich weiß gar nichts über Perl!!! Deshalb frage ich mal ganz dumm:
                  Kann ich den Code von Johannes einfach so in meine PHP-Datei schreiben, oder wie soll ich den einbinden? Wie lauten die Markierungszeichen für Perl (also die, die bei PHP <? und ?> lauten)? Und wie kann ich das dann überprüfen?

                  Danke für deine Antwort!

                  Hendrik

                  1. Hallo Hendrik,

                    Ich weiß gar nichts über Perl!!! Deshalb frage ich mal ganz dumm:
                    Kann ich den Code von Johannes einfach so in meine PHP-Datei schreiben, oder wie soll ich den einbinden? Wie lauten die Markierungszeichen für Perl (also die, die bei PHP <? und ?> lauten)? Und wie kann ich das dann überprüfen?

                    Nein, du musst den Code zuerst auf PHP portieren. Das sollte aber nicht all zu schwierig sein, da PHP da nicht viele Unterschiede macht. Und auch Regex nach Perl-Syntax gibt es unter PHP.

                    Ich würde dir aber davon abraten, den kompletten Regex zu übernehmen. Er mag zwar möglicherweise korrekt die Syntax einer URL überprüfen, aber wirklich performant dürfte das wohl nicht sein. Außerdem ist er zu alt, um IDN-Domains (mit Umlauten z.B.) zu erkennen.

                    Ich würde dir raten, zur Überprüfung der syntaktisch Korrektheit der URL nur die wichtigsten Dinge zu prüfen, denn selbst wenn du mit einem Regex die URL überprüft hast, heißt das nicht, das die URL auch registriert ist oder für den von dir gewünschten Zweck verwendet wird.

                    Schöne Grüße,

                    Johannes

                    --
                    WM-Tippspiel: http://zeller-johannes.de/wmtipp/
                    ie:% fl:( br:< va:| ls:[ fo:) rl:) n4:? ss:| de:] js:| ch:} sh:) mo:| zu:)
  2. Hallo Hendrik,

    Am besten wäre natürlich ein Script zur Überprüfung der Syntax der Domain.

    Das ist nicht so ganz simpel, guck dir mal das hier an: http://forum.de.selfhtml.org/archiv/2000/9/t21614/#m110363

    Schöne Grüße,

    Johannes

    --
    WM-Tippspiel: http://zeller-johannes.de/wmtipp/
    ie:% fl:( br:< va:| ls:[ fo:) rl:) n4:? ss:| de:] js:| ch:} sh:) mo:| zu:)