Fehler bei Formularvariable mit Umlaut

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

  • Fehler bei Formularvariable mit Umlaut

    Ich habe ein Problem beim Abfragen einer Variablen, die in einem Formular mittels POST übergeben wird.
    Es geht um eine Benutzeranmeldung. Wenn der Benutzer die Daten abgeschickt hat und es Fehler im Formular gegeben hat, dann werden die fehlerhaften Felder markiert und die alten Eingaben werden wieder eingetragen (ist sonst nervig, wenn man irgendwo einen Fehler gemacht hat und nochmal alle 10 anderen Angaben wiederholen muss).

    Das Problem taucht auf, wenn ich in einem Select-Element prüfen möchte, welchen Eintrag (Land) der User ausgewählt hat.
    Für Deutschland und die Schweiz funktioniert das ohne Probleme.
    Nur wenn ich Österreich angegebene habe, scheitert die Überprüfung.

    Hier der Ausschnitt aus dem Quellcode:
    PHP-Code:
    echo "<select type=\"text\" name=\"land\" size=\"1\">
              <option value=\"Deutschland\" "
    ;     if ($_REQUEST["land"]=="Deutschland") {echo "selected";} echo ">Deutschland
              <option value=\"&Ouml;sterreich\" "
    ; if ($_REQUEST["land"]=='Österreich')  {echo "selected";} echo ">&Ouml;sterreich
              <option value=\"Schweiz\" "
    ;         if ($_REQUEST["land"]=="Schweiz")     {echo "selected";} echo ">Schweiz
          </select>"

    Ich habe es auch schon mit if ($_REQUEST["land"]=='& Ouml;sterreich') versucht. Klappt leider auch nicht.
    Wo liegt das Problem? Wenn ich die Variable mittels echo ausgebe, wird "Österreich" angezeigt.

    Würde mich freuen, wenn jemand eine Lösung weiß.

  • #2
    dein editor benutzt wohl utf-8, während die seite in iso 8859-1 ausgegeben wird.

    für solche zwecke kodiert man das land mit einer zahl oder einem kürzel (de, au, ch), um kodierungsprobleme zu vermeiden.

    Kommentar


    • #3
      Kann gut sein. Na gut, dann mache ich es halt über diesen kleinen Umweg.

      Danke.

      Kommentar


      • #4
        warum ist das ein umweg? das ist sogar sparsamer bzgl. traffic und resistenter gegen kodierungsunterschiede.

        Kommentar


        • #5
          Umweg deshalb, weil ich die übergebene Values gleich in der Datenbank speichern wollte.
          Ist aber vielleicht etwas gefährlich, weil man so ungewünschte Werte in die DB schreiben kann, also passt der "Umweg" dann schon - hab es jetzt so implementiert, mit dem de/ch/au.

          Traffic macht bei den paar Byte kaum einen Unterschied. Da müsste ich schon Millionen Pagehits pro Monat haben, bis das ins Gewicht fällt - aber im Prinzip hast du Recht

          Jetzt stellt sich mir aber ein weiteres Problem:
          Ich checke sämtliche Eingaben auf Gültigkeit. So dürfen Namen nur aus Buchstaben bestehen.
          Dies prüfe ich so:
          PHP-Code:
          function check ($input)
          {
              if (
          preg_match("/^[ a-za-zäöüß]+$/i",$input)) { return true; } else { return false; }
          }

          if (
          check($_REQUEST["strasse"])) ... 
          Wenn ich aber eine Eingabe wie "Apfelstraße" checken lasse, bekomme ich eine Fehlermeldung.
          Wie kann ich dieses Problem umgehen? Vorher im PHP-Skript alle Vorkommen von ä,ö,ü,ß gegen ae, oe, ue, ss tauschen? Ist nicht gerade die eleganteste Lösung.

          Wie kann ich die Codierung herausfinden oder ändern?
          Ich habe den Befehl iconv (in, out, string) gefunden um von einem Charakter-Set zum anderen zu konvertieren. Würde das damit gehen?
          Dazu müsste ich aber auch wissen von welcher Codierung ich in welche wechseln muss.

          Kommentar


          • #6
            php, html und formular den charset mitteilen

            Hallo, ich hatte auch mal ein ähnliches Problem, Deine Seite arbeitet wahrscheinlich als ISO, Deine Formulardaten werden aber als UTF-8 übergeben. Schreibe in den form Tag accept-charset="ISO-8859-1" rein, vielleicht ist Dein Problem dann behoben, ansonsten per utf8_encode($variable) alle Forumlardaten wieder "lesbar" machen.
            Mit freundlichen Grüßen
            Werner

            Kommentar


            • #7
              Das mit dem accept-charset habe ich probiert, das klappte leider nicht.
              utf8_encode() habe ich versucht, das hat auch nicht funktioniert. Die Umlaute und das ß wurden dann nur als ? dargestellt.

              Ich arbeite auf einem Mac System mit Mac OS X. Vielleicht hilft das ja weiter.
              Bin etwas ratlos und suche schon die ganze Zeit nach einer Antwort im Internet

              Kommentar


              • #8
                Poste mal

                Hast Du Dir mal die Umlaute ausgeben lassen und geprüft welche Zeichenkodierung der Browser nutzt? Poste mal die Ausgaben, auch die Fehlermeldungen. Ansonsten die ganze Seite und auch die DB auf UTF-8 stellen und auch den connect zur DB anpassen, dann gehts Du den Problemen aus dem Weg,
                Mit freundlichen Grüßen
                Werner

                Kommentar


                • #9
                  Du solltest auch gleich im header dem Browser sagen das es UTF-8 ist.
                  Ich geh das meist so an:

                  php:
                  header('Content-type: text/html; charset=utf-8');
                  echo '<?xml version="1.0" encoding="utf-8"?>';


                  html:
                  <meta http-equiv="content-type" content="text/html; charset=utf-8" />


                  und bei mysql:
                  SET NAMES utf8;

                  oder os da bin ich mir nicht sicher obs nicht was besseres gibt ...

                  Kommentar


                  • #10
                    Na gut... folgender Code:

                    Im Header gebe ich aus:

                    <meta http-equiv="content-type" content="text/html;charset=iso-8859-15">
                    echo "ä ö ü ß" ergibt: � � � §
                    -----

                    <meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
                    echo "ä ö ü ß" ergibt: Š š Ÿ §
                    -----
                    <meta http-equiv="content-type" content="text/html;charset=utf-8">
                    echo "ä ö ü ß" ergibt: � � � �
                    -----

                    Mit der DB gibt es erstmal so keine Probleme.
                    Wenn ich da "Apfelstraße" in einem Formular eingebe und es so speichere, wird das ß korrekt gespeichert und wieder gelesen.
                    Zuletzt geändert von AdamP; 10.07.2007, 22:26.

                    Kommentar


                    • #11
                      Original geschrieben von AdamP
                      Im Header gebe ich aus:
                      Diese Angabe hat weniger Priorität, also eine vom Server in den HTTP Response Headern gemachte - stimmt die denn, wenn vorhanden?

                      Und in welcher Kodierung hast du die Datei denn jetzt wirklich abgespeichert?
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        Original geschrieben von wahsaga Diese Angabe hat weniger Priorität, also eine vom Server in den HTTP Response Headern gemachte - stimmt die denn, wenn vorhanden?
                        Ist damit der Befehl header() gemeint? Oder wie kann ich das bewerkstelligen?

                        Original geschrieben von wahsaga Und in welcher Kodierung hast du die Datei denn jetzt wirklich abgespeichert?
                        Ich habe die Webseite mit der Zend IDE unter Mac OS X erstellt. Voreingestellt als Encoding war "default". Leider nicht sehr hilfreich.
                        Habe es jetzt auf iso-8859-1 eingestellt - oder soll es doch lieber utf-8 sein?

                        Alles ganz schön frustrierend, dass einen so eine Kleinigkeit so lange aufhalten kann
                        Vielleicht stelle ich mich auch nur etwas ungeschickt an, aber ich habe jetzt schon mehrere Seiten zu ähnlichem Thema im Netz gefunden.

                        Probiere es morgen mal weiter... danke euch allen für die vielen Tipps!

                        / Edit:
                        Habe den Fehler gefunden!
                        Es war anscheinen weder utf-8 noch iso-8859 eingestellt. Sondern "default".
                        Und was das heißt... keine Ahnung
                        Habe es jetzt in der IDE auf iso-8859-1 eingestellt und auf einmal funktioniert alles. Super, vielen Dank nochmal

                        Kommentar

                        Lädt...
                        X