Markus: Probleme mit preg_replace

Hallo,

ich möchte, daß der User automatisch eine Subdomain anlegen kann. Hierfür füllt ein Formular-Feld aus (domain). Jetzt möchte ich diese Variable ($domain) nach unerlaubten Zeichen durchsuchen. Dies mache ich mit folgendem Script:
$domain = preg_replace("/[^a-zA-Z0-9]/","",$domain);
Jetzt möchte ich die Auswahl an Zahlen und Buchstaben noch um das Minus(-) erweitern. Wo schreib ich das denn hin? Ich habe schon (aus meiner Sicht) alles ausprobiert.

Danke für die Hilfe!

Markus

  1. Hallo,

    $domain = preg_replace("/[^a-zA-Z0-9]/","",$domain);

    Hab da zwar nicht so die Ahnung von...

    aber AFAIK können Domains jetzt auch Umlaute enthalten.

    -> Dein reg. Ausdruck sieht nicht so aus, als wenn er Umlaute zuließe.
    -> Oder dürfen zwar Domains aber keine Sub-Domains Umlaute enthalten?

    Gib Bescheid, wenn ich mich irren sollte. Danke.

    Gruß
    Arx

    --
    ss:| zu:| ls:& fo:) de:] va:} ch:? n4:{ rl:? br:& js:| ie:% fl:| mo:}
    1. Ich denke, im Prinzip hast Du recht, aber das will ich nicht zu lassen. Ich glaube Unterstriche sind auch erlaubt, oder? aber das will ich alles nicht. Nur Buchstaben, Zahlen und das Minus.

      Trotzdem Danke für Dein Posting!

      1. Hi,

        Ich glaube Unterstriche sind auch erlaubt, oder?

        nein, nur Buchstaben, Ziffern und der Bindestrich; nebst des Punktes, dem eine Sonderbedeutung zuteil wird.

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hello Cheatah,

          only by the Way: bist Du kein Fußballfan?

          Die Anderen sind während der Spiele immer alle verschwunden. Kann man richtig nachvollziehen. ;-)

          Liebe Grüße aus http://www.braunschweig.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          1. Hi,

            only by the Way: bist Du kein Fußballfan?

            nein, warum sollte man auch einem Fußball stetig Luft zufächeln? ;-)

            Cheatah, weder Biertrinker noch Fußballgucker noch Autovergötterer noch Klobrillenhochgeklapptlasser noch Seerosengießer noch ...

            --
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
            1. Hallo!

              Cheatah, weder Biertrinker noch Fußballgucker noch Autovergötterer noch Klobrillenhochgeklapptlasser noch Seerosengießer noch ...

              Die Summe aller Laster ist immer gleich - oder nicht.

              Beste Grüße
              Viennamade

              1. Hello,

                Cheatah, weder Biertrinker noch Fußballgucker noch Autovergötterer noch Klobrillenhochgeklapptlasser noch Seerosengießer noch ...
                Die Summe aller Laster ist immer gleich - oder nicht.

                Nö, daimler und MAN und FIAT und Volvo und wie die alle heißen bauen täglich neue

                Liebe Grüße aus http://www.braunschweig.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau
                1. Hi,

                  Die Summe aller Laster ist immer gleich - oder nicht.
                  Nö, daimler und MAN und FIAT und Volvo und wie die alle heißen bauen täglich neue

                  davon abgesehen: Die einzige wirkliche Konstante ist die Intelligenz. Und die Bevölkerung wächst ...

                  Cheatah

                  --
                  X-Will-Answer-Email: No
                  X-Please-Search-Archive-First: Absolutely Yes
                  1. Hallo!

                    Die Summe aller Laster ist immer gleich - oder nicht.
                    Nö, daimler und MAN und FIAT und Volvo und wie die alle heißen bauen täglich neue

                    davon abgesehen: Die einzige wirkliche Konstante ist die Intelligenz. Und die Bevölkerung wächst ...

                    Jetzt wollte ich wie aus der Pistole geschossen kommentieren: "Die IT-Industrie wurde geschaffen um diese Konstante zu brechen" (siehe Tom's Sprüche unterhalb seiner Signatur) - und dann ist mir Microsoft eingefallen.

                    Beste Grüße
                    Viennamade

                  2. Hallo,

                    Die einzige wirkliche Konstante ist die Intelligenz. Und die Bevölkerung wächst ...

                    Das ist ein interessantes Postulat, wenn auch nicht neu. Allerdings glaube ich eher an die Theorie Terry Pratchetts. Intelligenz entsteht, wenn Wesen, die eine biologische oder technische Ausstattung besitzen, welche das Phantasieren erlaubt, dieses auch tun. Der Mensch ist deshalb intelligent, weil er der pan narrans, der Geschichten erzählende(erfindende) Schimpanse ist. Somit gibt es als Konstante nur den Phasenraum aller möglichen erdenkbaren Geschichten. Das Wachstum der Bevölkerung wäre dann nichts Intelligenzminderndes, sondern eher die Vergrößerung der Speicherkapazität (Gehirnvolumina) für die erdachten Geschichten. Vorausgesetzt natürlich, die Menschen erfinden weitere neue Geschichten.

                    viele Grüße ;-))

                    Axel

                    1. Hi,

                      Somit gibt es als Konstante nur den Phasenraum aller möglichen erdenkbaren Geschichten.

                      Phasenraum oder Phrasenraum ;-)

                      cu,
                      Andreas

                      --
                      MudGuard? Siehe http://www.Mud-Guard.de/
                      Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
                      1. Hallo,

                        Somit gibt es als Konstante nur den Phasenraum aller möglichen erdenkbaren Geschichten.

                        Phasenraum oder Phrasenraum ;-)

                        Beides?

                        Da der Phasenraum aller möglichen erdenkbaren Geschichten etwas mit Sprache zu tun haben muss, ist es teilweise auch ein Phrasenraum.

                        viele Grüße

                        Axel

                        1. Hi,

                          Da der Phasenraum aller möglichen erdenkbaren Geschichten etwas mit Sprache zu tun haben muss, ist es teilweise auch ein Phrasenraum.

                          streng genommen müsste der Ph(r)asenraum den L-Raum vollständig beinhalten. Himmel, muss der gekrümmt sein!

                          Heißt das, jede Phrase ist mit jeder anderen Phrase verbunden? Und wenn ja, macht sich dann ein Phrasendrescher der Massenfolter schuldig?

                          Phragen über Phragen ...

                          Cheatah

                          --
                          X-Will-Answer-Email: No
                          X-Please-Search-Archive-First: Absolutely Yes
                          1. Hi,

                            Phragen über Phragen ...

                            Das muß man eher p(h)ragmatisch betrachten - aber nicht im Durchlicht, das wär ja dann ein Diaphragma ;-)

                            cu,
                            Andreas

                            --
                            MudGuard? Siehe http://www.Mud-Guard.de/
                            Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
                            1. Hi,

                              Phragen über Phragen ...
                              Das muß man eher p(h)ragmatisch betrachten - aber nicht im Durchlicht, das wär ja dann ein Diaphragma ;-)

                              kein Problem. Wir stellen es einfach mit einem phragtalen Algorithmus dar, dann fällt's höchstens phragmentarisch auf. Ich kann allerdings verstehen, wenn Du vor so einem Verfahren Phragsausen hast, es ist schließlich mehr als phragwürdig.

                              Cheatah

                              --
                              X-Will-Answer-Email: No
                              X-Please-Search-Archive-First: Absolutely Yes
                          2. Hallo,

                            streng genommen müsste der Ph(r)asenraum den L-Raum vollständig beinhalten.

                            Nein, andreasrum. Ich behaupte, es kann Bibliotheken voller Bücher geben, die _keine_ Phrase enthalten. Natürlich noch mehr, welche nicht _nur_ Phrasen enthalten.

                            Beispiele:
                            Telefonbücher
                            Kontenverzeichnisse
                            Hauptbücher der Buchführung
                            ...

                            und

                            http://www.peak.org/~dadaist/Deutsch/NurText/gadjiberi.html

                            viele Grüße ;-))

                            Axel

      2. Hello,

        Ich denke, im Prinzip hast Du recht, aber das will ich nicht zu lassen. Ich glaube Unterstriche sind auch erlaubt, oder? aber das will ich alles nicht. Nur Buchstaben, Zahlen und das Minus.

        Ich würde diesen ganzen neumodischen Quatsch auch nicht zulassen. Funktioniert doch sowieso noch nicht ordentlich. Das ist doch nur wieder ein Trick dieser Abzockerklicke gewesen, wieder ein paar Leute unter "Kaufzwang" zu setzen.

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
    2. Hi,

      aber AFAIK können Domains jetzt auch Umlaute enthalten.

      diese werden durch Zeichen dargestellt, die schon immer erlaubt werden.

      -> Dein reg. Ausdruck sieht nicht so aus, als wenn er Umlaute zuließe.

      Da es um die _Vergabe_ von Hostnamen geht, kann Markus gerne entscheiden, keine Umlaute zuzulassen. Oder keine Ziffern. Oder den Buchstaben "v", wenn er den reservieren möchte (oder einfach nur nicht mag).

      -> Oder dürfen zwar Domains aber keine Sub-Domains Umlaute enthalten?

      RFC 3490 redet von "Domain Name", erklärt aber auch, dass damit Hostnamen "in general" gemeint sind.

      Cheatah

      --
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
  2. Hi,

    $domain = preg_replace("/[^a-zA-Z0-9]/","",$domain);
    Jetzt möchte ich die Auswahl an Zahlen und Buchstaben noch um das Minus(-) erweitern. Wo schreib ich das denn hin?

    wie Du an der RegExp bereits siehst, ist das Minuszeichen innerhalb von Zeichenklassen ein Sonderzeichen. Sonderzeichen müssen maskiert werden; wie in der Programmierung fast immer üblich ist das Escape-Zeichen der Backslash.

    Ich habe schon (aus meiner Sicht) alles ausprobiert.

    Auch ohne Maskierung würde eine Lösung existieren; ich empfehle Dir jedoch, diese nicht anzuwenden.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Danke! Problem gelöst! Für alle die die Antwort von Cheatah nicht 100% kapiert haben. Hier die praktische Umsetzung!

      $domain = preg_replace("/[^a-zA-Z0-9-]/","",$domain);

      Hi,

      $domain = preg_replace("/[^a-zA-Z0-9]/","",$domain);
      Jetzt möchte ich die Auswahl an Zahlen und Buchstaben noch um das Minus(-) erweitern. Wo schreib ich das denn hin?

      wie Du an der RegExp bereits siehst, ist das Minuszeichen innerhalb von Zeichenklassen ein Sonderzeichen. Sonderzeichen müssen maskiert werden; wie in der Programmierung fast immer üblich ist das Escape-Zeichen der Backslash.

      Ich habe schon (aus meiner Sicht) alles ausprobiert.

      Auch ohne Maskierung würde eine Lösung existieren; ich empfehle Dir jedoch, diese nicht anzuwenden.

      Cheatah

  3. Hello Markus,

    ich möchte, daß der User automatisch eine Subdomain anlegen kann. Hierfür füllt ein Formular-Feld aus (domain). Jetzt möchte ich diese Variable ($domain) nach unerlaubten Zeichen durchsuchen. Dies mache ich mit folgendem Script:

    welchen Webserver benutzt Du denn?
    Findest Du es für richtig, dass an der Serveradministration mittels HTTP rumgefummelt werden darf?

    Der Webserver i.d.R. für die Aktivierung der Subdomain neu gestartet werden. Ich kenne jedenfalls keinen, der das ohne Neustart kann.

    Es wäre auf jeden Fall sicherer, ein zweistufiges Konzept aufzubauen. Die gewünschte Subdomain wird in eine Datei eingetragen. Diese wird von einem anderen Script auf dem Server mittels Cronjob ausgewertet und nur, wenn alles OK ist, wird sie in der separaten Host.conf zu dieser Domain eongetragen. Wenn alle Subdomains-Wünsche zu allen Domains erledigt sind, wird der Server rebootet.

    Durch diese doppelte Stufe sollte es sehr schwer werden, irgendwelche Manipulationen durchzubekommen.

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. Hallo Tom,

      danke für Deinen Hinweis. Ich hatte folgenden Prozess im Sinn:

      • User gibt Domain ein
      • in php wird diese auf Gültigkeit überprüft
      • wenn Problem, Vorschlag an den User
      • wenn okay (Achtung jetzt nicht lachen), schreibe ich die Domainin die Domain Tabelle (mySQL DB)des Confixx Tools auf meinem Root Server. Dieser startet dann den Apache neu und die Domain ist aktiv.

      Das ist bestimmt der dümmste Weg den es gibt, aber ich kenn mich dummerweise mit dem ganzen Kram (httpd, config, etc.) nicht aus, aber muss dieses Problem lösen. Eigentlich wollte ich eine Wildcard-Domain *.domain.de anlegen. Diese sollte in ein Verzeichnis verweisen und in der dortigen index.php, wollte ich die Domain auslesen und via DB-Abgleich in das entsprechende Verzeichnis wechseln. Ein php-rewrite sozusagen. Denn das eigentliche rewrite bekomm ich auch nicht zum Laufen. Leider unterstützt Confixx 3.0 keine Wildcards (Bug!) und das Updaten der Software bekomme ich auch nicht hin!

      Berechtigte Frage: Was macht so ein Typ eigentlich mit einem root-Server wenn er keine Ahnung hat! Stimmt, ist jetzt aber dummerweise so und ich muss diesen Kram hier bis nächste Woche fertig haben. Danach will ich mich mal in die Apache Konfiguration einlesen!

      Vielleicht hast Du noch einen besseren Rat für mich? Du wolltest mir auch schon im Mai die Unterlagen für Eure Seminare schicken! Mach mal bitte!

      Danke und CU Markus

      1. Hi,

        Das ist bestimmt der dümmste Weg den es gibt,

        er ist straight forward. Das einzige Problem (wenn die Prüfungen sauber sind) ist der Server-Neustart, den man IMHO nur mit deutlich erhöhtem Aufwand wegrationalisieren kann, z.B. mit einem Server-Modul. Ich muss allerdings gestehen, dass ich zu dieser Problematik keine wirkliche Marktübersicht habe.

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Danke für die Antwort! Hast du auch einen Vorschlag für mich, Tom?

      2. Hello Markus,

        ich hatte Dir das so schön beantwortet, da war plötzlich das Eingabefeld wieder leer. *schnüff*

        Wie cheatah schon schreibt, das ist bei Confixx straight forward, das heißt also, dass Du gar keinen anderen Weg als den von Dir geplanten gehen kannst. Und ob Confixx die Original-Config-Dateien nutzt oder die Configuration auf seine eigenen umlenkt, weiß ich auch nicht. Es gibt Systeme (LinunxConf) die das leider teilweise tun. Und wenn dann jemand parallel die Originaldateien nutzt, hast Du das schönste Durcheinander.

        Da ja nicht das PHP-Script in die Config-Datei schreibt, sondern Confixx das erledigt, hast Du ein Mindestmaß an Sicherheit beibehalten. Bei direktem Zugriff könnte man bei einem Fehler ja alles umconfigurieren und z.B. PUT oder DELETE freischalten...

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
      3. Sup!

        http://httpd.apache.org/docs/stopping.html

        Vielleicht reicht ja ein USR1 Signal...?

        Gruesse,

        Bio