Holger: erkennen ob www. oder http://www.

Hallo!
Das ist jetzt vielleicht eine blöde Frage, habe im Archiv auch schon so was ähnliches gefunden ( http://forum.de.selfhtml.org/archiv/2000_3/t21729.htm ), damit geht's aber nicht so recht.

Problem: In einem Gästebuch kann man seine Hompage-URL eintragen. Manche geben sie so ein: "http://www.homepage.xx", manche so: "www.homepage.xx".

Wenn die URL ohne "http://" eingegeben wird, soll das Script eben "http://" anhängen. Ich dachte, das mache ich dann so: $url =~ s!www(.+?)!http://www$1!ig; Jetzt werden an die URLs, die mit "http://" eingegeben werden nochmal "http://" angehängt (weil ja trotzdem "www" vorkommt). Gibt's da eine einfache Lösung?

  1. Hi,

    $url =~ s!www(.+?)!http://www$1!ig;

    $url =~ s!^www.!http://www!i; # Option /g brauchst Du nun _wirklich_ nicht :-)
    oder
    $url =~ s!^(?!http://)!http://!i; # ungetestet

    Allgemein:

    perldoc perlre

    Cheatah

    1. Hi,

      $url =~ s!www(.+?)!http://www$1!ig;

      $url =~ s!^www.!http://www!i; # Option /g brauchst Du nun _wirklich_ nicht :-)
      oder
      $url =~ s!^(?!http://)!http://!i; # ungetestet

      Allgemein:

      perldoc perlre

      Cheatah

      ... Ah, doch so einfach! DANKE!
      Holger

      1. Moin!

        ... Ah, doch so einfach! DANKE!

        Vor allem wichtig: Mache keinerlei Annahmen darüber, wie URLs normalerweise beginnen! 'www' ist ein Namensbestandteil, der nur zufällig in vielen URLs vorkommt. Viele User bei T-Online haben z.B. einen Alias in der leichter merkbaren Form "name.bei.t-online.de". Da kommt dann noch "http://" davor, und die URL ist komplett. Aber nirgendwo ist auch nur ein einziges 'www' zu sehen.

        Du solltest also nur prüfen, ob die URL mit 'http://' beginnt, und das nötigenfalls hinzufügen.

        Oder eben (die Variante wurde auch schon genannt) du formulierst dein Formular so, daß keinerlei Verwechslung möglich ist, und alle schön 'http://' an den Anfang ihrer URL schreiben.

        - Sven Rautenberg

        1. Hoi,

          Oder eben (die Variante wurde auch schon genannt) du formulierst
          dein Formular so, daß keinerlei Verwechslung möglich ist, und alle
          schön 'http://' an den Anfang ihrer URL schreiben.

          Programmierer-Regel Nr. 1: Verlasse dich *nie*mals auf Usereingaben.

          Gruesse,
           CK

          1. Moin!

            Programmierer-Regel Nr. 1: Verlasse dich *nie*mals auf Usereingaben.

            Programmierer-Regel Nr. 2: Vermeide Redundanz[1] ;-)

            SCNR

            Viele Gruesse,

            Einbecker

            [1]http://forum.de.selfhtml.org/?m=24548&t=4361

            1. Hi,

              Programmierer-Regel Nr. 1: Verlasse dich *nie*mals auf Usereingaben.

              Programmierer-Regel Nr. 2: Vermeide Redundanz[1] ;-)

              Programmierer-Regel Nr. 3: Vermeide unnötige Wiederholungen.

              SCNR

              Dito :-)

              Cheatah

              1. hi!

                Programmierer-Regel Nr. 1: Verlasse dich *nie*mals auf Usereingaben.
                Programmierer-Regel Nr. 2: Vermeide Redundanz[1] ;-)
                Programmierer-Regel Nr. 3: Vermeide unnötige Wiederholungen.

                H.B. Fyfe Murphy's Laws Of Computer Programming

                LAWS OF COMPUTER PROGRAMMING: I. Any given program, when running, is obsolete.

                LAWS OF COMPUTER PROGRAMMING: II. Any given program costs more and takes longer.

                LAWS OF COMPUTER PROGRAMMING: III. If a program is useful, it will have to be changed.

                LAWS OF COMPUTER PROGRAMMING: IV. If a program is useless, it will have to be documented.

                LAWS OF COMPUTER PROGRAMMING: V. Any program will expand to fill available memory.

                LAWS OF COMPUTER PROGRAMMING: VI. The value of a program is proportional to the weight of its output.

                LAWS OF COMPUTER PROGRAMMING: VII. Program complexity grows until it exceeds the capabilities of the programmer who must maintain it.

                LAWS OF COMPUTER PROGRAMMING: VIII. Any non-trivial program contains at least one bug.

                LAWS OF COMPUTER PROGRAMMING: IX. Undetectable errors are infinite in variety, in contrast to detectable errors, which by definition are limited.

                LAWS OF COMPUTER PROGRAMMING: X. Adding manpower to a late software project makes it later.

                bye, Frank!

          2. Hi,

            Programmierer-Regel Nr. 1: Verlasse dich *nie*mals auf Usereingaben.

            exakt. Wir haben so ein Formular, welches ein Eingabefeld mit value="http://" vorbelegt; die Ergebnisse werden uns per Mail zugesandt. Dabei gibt es allerhand, öhm, Merkwürdigkeiten. Der wohl krasseste Fall war aber folgende "URL":

            www.domain.dehttp://

            In diesem Sinne,

            Cheatah

  2. Hi!

    Wenn die URL ohne "http://" eingegeben wird, soll das Script eben "http://" anhängen. Ich dachte, das mache ich dann so: $url =~ s!www(.+?)!http://www$1!ig; Jetzt werden an die URLs, die mit "http://" eingegeben werden nochmal "http://" angehängt (weil ja trotzdem "www" vorkommt). Gibt's da eine einfache Lösung?

    Mmh, einfach das Formularfeld mit http:// vorbelegen, dann sparst du dir das alles...

    Gruß,
    Pascal

    1. Moin!

      Mmh, einfach das Formularfeld mit http:// vorbelegen, dann sparst du dir das alles...

      Und was waere, wenn der User dann das http:// ueberschreibt? Wenn du die URI dann als link einbindest, sieht das mehr als peinlich aus - Und "das alles" ist ein kleiner Perl-RegExp - So what?

      Viele Gruesse,

      Einbecker

  3. Hallo!
    Das ist jetzt vielleicht eine blöde Frage, habe im Archiv auch schon so was ähnliches gefunden ( http://forum.de.selfhtml.org/archiv/2000_3/t21729.htm ), damit geht's aber nicht so recht.

    Problem: In einem Gästebuch kann man seine Hompage-URL eintragen. Manche geben sie so ein: "http://www.homepage.xx", manche so: "www.homepage.xx".

    Wenn die URL ohne "http://" eingegeben wird, soll das Script eben "http://" anhängen. Ich dachte, das mache ich dann so: $url =~ s!www(.+?)!http://www$1!ig; Jetzt werden an die URLs, die mit "http://" eingegeben werden nochmal "http://" angehängt (weil ja trotzdem "www" vorkommt). Gibt's da eine einfache Lösung?

    eine andere möglichkeit:
    $url = ($url =~ /http:///) ? $url : "http://$url";

    lois

    1. Hi,

      $url = ($url =~ /http:///) ? $url : "http://$url";

      die Variante ist nicht schlecht; allerdings kann man sich dann auch gleich die (kostenintensive) RegExp sparen und mit index() arbeiten.

      Cheatah

      1. Moin!

        $url = ($url =~ /http:///) ? $url : "http://$url";

        die Variante ist nicht schlecht; allerdings kann man sich dann auch gleich die (kostenintensive) RegExp sparen und mit index() arbeiten.

        Da faellt mir eigentlich eines zu ein: TMTOWTDI[1] ;-)

        Viele Gruesse,

        Einbecker

        [1]http://info.astrian.net/jargon/terms/t/TMTOWTDI.html

        1. Hi,

          TMTOWTDI[1] ;-)

          hm, wenn hinter dem ersten "T" noch ein "I" ist, kann man es fast aussprechen... darum gefällt mir die Variante besser *g*

          [1]http://info.astrian.net/jargon/terms/t/TMTOWTDI.html

          Btw: Und wenn einem MTOW einfällt, sollte man sich darüber Gedanken machen, welcher am performantesten flutscht.

          Cheatah

      2. Moin auch!

        $url = ($url =~ /http:///) ? $url : "http://$url";
        die Variante ist nicht schlecht; allerdings kann man sich dann auch gleich die (kostenintensive) RegExp sparen und mit index() arbeiten.

        Stimmt, aber die obere kann man schnell noch auf

        $url = 'http://' . $url unless ($url =~ m|[1][a-z0-9.+-]+://|);
            # RFC2396 compliance untested

        erweiteren, fuer den Fall, dass jemand eine ftp- oder gopher-Adresse als Homepage eintraegt. ;-)

        So long


        1. a-z ↩︎