Ankündigung

Einklappen
Keine Ankündigung bisher.

String auf Encoding UTF-8 prüfen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • String auf Encoding UTF-8 prüfen

    Hallo,

    ich hab ein Registrierungsformular erstellt, welches die Daten in eine Datenbank abspeichern. Ich habe heute mal griechische Buchstaben verwendet und diese werden vom Formular angenommen... wie sollte es auch anders sein... und in der Datenbank wird das in seltsamen Code umformuliert. However, ich will nur deutsche Buchstaben (und Zahlen) als Eingabewerte in meinem Formular erlauben, wie prüfe ich darauf?

  • #2
    Code:
    [a-zA-Z0-9] (u.U Umlaute hinzufügen)
    bzw. wenn du das ganze Locale abhängig möchtest: ctype_alnum.

    Die bessere Lösung wäre es jedoch, dein Problem zusätzlich zu beheben, unabhängig davon, ob andere Zeichen gewünscht sind. (Ansonsten kannst du auch mit Umlauten und ß in Probleme kommen)

    Unter anderem:
    http://php-de.github.io/jumpto/mysql-and-utf8/
    Zitat von nikosch
    Naja, anscheinend spricht die Steckdose kein HTTP. LOL

    Kommentar


    • #3
      Zitat von String Beitrag anzeigen
      [...] und in der Datenbank wird das in seltsamen Code umformuliert. However, ich will nur deutsche Buchstaben (und Zahlen) als Eingabewerte in meinem Formular erlauben, wie prüfe ich darauf?
      Du musst nix prüfen.
      Es ist ausreichend, konsequent UTF-8 zu verwenden.
      Siehe Suralcs Link...
      Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

      Kommentar


      • #4
        Hm... das versteh ich nicht so ganz. Also in den Spalten meiner Tabelle habe ich die Kollektion immer auf utf8_german2_ci gestellt. Wenn ich mich im Formular mit πø anmelde, dann komm ich damit durch: "Willkommen, πø!". Und hier möchte ich ansetzen. Ich will eine Fehlermeldung ausgeben, sollte der Nutzer Schriftzeichen außerhalb des deutschen Alphabets benutzt haben.
        Unter phpMyAdmin heißt es dann πø.

        Kommentar


        • #5
          Ich will eine Fehlermeldung ausgeben, sollte der Nutzer Schriftzeichen außerhalb des deutschen Alphabets benutzt haben.
          Ok, dann hat Suralc den entscheidenden Tipp gegeben (Prüfung per RegExp).
          Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

          Kommentar


          • #6
            :S Hm... tut mir Leid, ich steh grad aufm Schlauch.
            Soll ich vielleicht jeden Charakter im String darauf untersuchen ob er a oder b oder c oder .... ist?

            Kommentar


            • #7
              Das macht eine Regular Expression für dich
              Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

              Kommentar


              • #8
                Uh.. geschafft
                Hiermit: [0-9a-zA-Z]
                Ich hab mir schon mehrere Foren-Threads angeschaut die dieses Problem behandelten, aber ich kam mit ihnen nicht auf ein Ergebnis, das mir weiterhilft. Ich möchte jetzt noch die Umlaute (äöü, ÄÖÜ), ß und einige Symbole erlauben, wie mach ich das?

                Ich hab mir im Internet auch mal die "RegEx" für eine E-Mail Validieren angeschaut und das gefunden:
                preg_match("/([0-9a-zA-Z])@(\w+)\.(\w+)/", $email)
                Ich hab sie angewendet und sie funktioniert. Ich hab dazu einige Fragen: Was heißen die Slashes und Backslashes? Und was bedeutet der Teil mit w? Etwa alle Buchstaben?

                Kommentar


                • #9
                  Der Backslash ist in diesem Fall ein Escapezeichen, um anzuzeigen, das das "w" keinen Buchstaben darstellt. Die beiden Slashes am Anfang und am Ende sind Delimiter, in der Theorie können das alle nicht alphanumerischen Zeichen, mit der Ausnahme von \, Leerzeichen und Tab. In der Regel werden aber '/', '#', oder '~' verwendet. Zum Weiterlesen:
                  http://php.net/manual/de/regexp.refe...delimiters.php

                  \w sollte Prinzipiell (bzw. im Falle von PCRE) "[A-Za-z0-9_]" ersetzen.

                  Der Regex zur Email-Überprüfung ist vermutlich (oder eher sicher) falsch.

                  Die einfachste Möglichkeit ist es, php's interne Filtererweiterung zu benutzen(sollte für die meisten aller E-Mail-Adressen, die du antreffen wirst korrekte Ergebnisse erzielen):

                  PHP-Code:
                  $isValidEmail filter_var('bob@example.com'FILTER_VALIDATE_EMAIL) !== false
                  Q: http://php.net/manual/de/function.filter-var.php

                  Als Referenz: Das hier ist der Ausdruck der von PHP intern verwendet wird, wenn du die genannte Funktion aufrufst..





                  Quellen zum Weiterlesen:
                  http://www.regular-expressions.info/tutorial.html
                  https://courses.cs.washington.edu/co...heat-sheet.pdf
                  Zitat von nikosch
                  Naja, anscheinend spricht die Steckdose kein HTTP. LOL

                  Kommentar


                  • #10
                    Zitat von Suralc Beitrag anzeigen
                    Die einfachste Möglichkeit ist es, php's interne Filtererweiterung zu benutzen(sollte für die meisten aller E-Mail-Adressen, die du antreffen wirst korrekte Ergebnisse erzielen):

                    PHP-Code:
                    $isValidEmail filter_var('bob@example.com'FILTER_VALIDATE_EMAIL) !== false
                    Hab bisschen umprobiert, ja das ist wirklich die beste Lösung. Danke für den Tipp und die Erklärung Würde gerne trotzdem noch wissen wie ich Umlaute und bestimmte Sonderzeichen erlaube.

                    Kommentar


                    • #11
                      Entweder hab ich bei mir was kaputt gemacht oder es ging nie O.o

                      PHP-Code:
                      preg_match("[0-9a-zA-Z]""bob"
                      returnt bei mir false.

                      Kommentar


                      • #12
                        [0-9a-zA-Z]
                        stellt nur ein einzelnes Zeichen dar.

                        Syntaktisch korrekt:

                        Code:
                        preg_match('~[0-9a-zA-Z]~', 'bob'); // int(0)
                        Das Ergebnis ist int(0) und nicht false. Das macht in diesem Fall einen Unterschied.

                        Du willst aber vermutlich mehrere Zeichen behandeln.

                        Zum Vergleich:
                        http://3v4l.org/o8IIR#v4310

                        Die Erklärung für das '+' steht schon in einem der Links, die ich dir gepostet habe. (Eigentlich in beiden)
                        Zitat von nikosch
                        Naja, anscheinend spricht die Steckdose kein HTTP. LOL

                        Kommentar


                        • #13
                          Mhm... Ok, ich verstehe dass man 0 oder 1 statt false oder true als Wert zurück bekommt. Der Unterschied ist mir leider immer noch nicht klar. Ohne die Wellen und das + bekomme ich immer 0, bei den anderen wird eben nur das erste Zeichen kontrolliert und der Rest des Strings ignoriert, wie mach ich das denn jetzt?

                          Kommentar


                          • #14
                            Ein 'false' bedeutet, es ist ein Fehler aufgetreten, z.B. weil dein Pattern einen Fehler aufweist. Eine 0 heisst, es wurde kein "match" erzielt (das gesuchte Pattern wurde nicht gefunden).

                            Die "Wellen" sind die Delimeter, die benötigt werden (das liest du bitte selber nach).

                            Und das + ist ein Quantifizierer (auch das liest du nach, siehe Suralcs links).
                            Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                            Kommentar


                            • #15
                              Zitat von lstegelitz Beitrag anzeigen
                              Ein 'false' bedeutet, es ist ein Fehler aufgetreten, z.B. weil dein Pattern einen Fehler aufweist. Eine 0 heisst, es wurde kein "match" erzielt (das gesuchte Pattern wurde nicht gefunden).

                              Die "Wellen" sind die Delimeter, die benötigt werden (das liest du bitte selber nach).

                              Und das + ist ein Quantifizierer (auch das liest du nach, siehe Suralcs links).
                              'false' kann doch aber auch der Wert einer booleschen Variable sein? Dass das in PHP mit 0 und 1 statt false und true bezeichnet wird, verwirrt mich. Bei einer Abfrage, kann ich da immer noch mit x==true arbeiten oder müsste ich x==1 machen?

                              Ok... habe gelesen, dass Delimeter bei dieser Art von Funktionen einfach notwendig sind.

                              Die Quantifizierer.... "Er gibt an, wie oft das vorausgehende Zeichen vorkommt". So wie ich das verstehe, müsste er zählen wie viele (in meinem Fall) Buchstaben und Ziffern in dem String vor kommen (oder doch nur an der ersten Stelle des Strings?) und eine Zahl als Wert zurück geben.

                              Kommentar

                              Lädt...
                              X