UTF8, Sonderzeichen und mySQL

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • UTF8, Sonderzeichen und mySQL

    Hallo!

    Ich habe derzeit ein kleines Problemchen, dass nicht gelöst werden will. Und zwar habe ich in meiner Index erst einmal folgenden Header deklariert:

    PHP Code:
    header('Content-Type: text/html; charset=UTF-8'); 
    Nun habe ich ein Inputfeld, dass einen String mit Sonderzeichen beinhaltet (z.B. Spaß).

    Nach drücken auf "Speichern" kommt nun folgendes prozedere:

    PHP Code:
    $sql "UPDATE table SET feld = '.StringBereinigen($_POST['inputfeld']).'";
    $mysql->query($sql); 
    Die Funktion "StringBereinigen" sieht wie folgt aus:

    PHP Code:
    function StringBereinigen($_String) {
    $_Stringstrtolower($_String);
    $_Search = array('ä''ö''ü''ß');
    $_Replace = array('ae''oe''ue''ss');
    $_Stringstr_replace($_Search$_Replace$_String);
    $_Stringpreg_replace('/[^a-z0-9]+/'''$_String);
    return(
    $_String);

    Soweit, so gut.

    Problem dabei: In der Datenbank wird "spaß" geschrieben (Kollation des Feldes utf8_general_ci). Da das ersetzen von "Nicht-Sonderzeichen" (wie z.B. "S") jedoch funktioniert, liegt es schonmal nicht an der Funktion... Aber weiter habe ich keine Ahnung. Ich will nur nicht unbedingt nach "ß" suchen und ersetzen müssen...

    Hat jemand einen Ratschlag?
    Last edited by DumbleOpun; 01-06-2010, 18:15.

  • #2
    Solche Probleme treten immer dann auf, wenn irgendwas einen anderen Zeichensatz verwendet - Browser, DB, Script. Ich tippe in diesem Fall auf Script, denn der Browser hält sich an die HTTP-Header und die DB ans Charset (Kollation ist was anderes). Also: Mit welchen Zeichensatz sind deine Scripte gespeichert; hast du deine IDE auf UTF-8 eingestellt?

    Comment


    • #3
      Also der Starttag vom Formular ist wie folgt:

      Code:
      <form accept-charset="utf-8" action="...

      Comment


      • #4
        Welchen Charset hat die Datenbank Verbindung?
        carpe noctem

        [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
        [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

        Comment


        • #5
          Hm... Speziell der Verbindung? Laut phpMyAdmin liegt die Datenbank jedoch in UTF8 vor...

          //Edit: Okay, ich habe nun direkt nach dem Öffnen der Verbindung den Befehl "SET NAMES 'utf8'" gesendet. Jetzt wird aus "Spaß" nur noch "Spa"...
          Last edited by DumbleOpun; 01-06-2010, 18:06.

          Comment


          • #6
            ... und wo (mit welchem Charset) guckst du dir das an?

            Ist doch ganz einfach: Alles auf UTF-8 und das Problem ist gelöst.

            Comment


            • #7
              Die Ausgabe ist ja kein Problem mehr.

              Ich speicher die Daten zweimal: Einmal normal und einmal eben mit der Funktion oben. Am Beispiel "Spaß":

              DB-Feld 1: "Spaß" - da ist alles korrekt
              DB-Feld 2: "spa" - da wird das "ß" zwar gelöscht, aber nicht wie gewünscht ersetzt...

              Comment


              • #8
                Keiner eine Idee?

                Comment


                • #9
                  Hallo,

                  Du hattest doch schon einen Hinweis in die richtige Richtung bekommen:

                  Originally posted by onemorenerd View Post
                  Solche Probleme treten immer dann auf, wenn irgendwas einen anderen Zeichensatz verwendet - Browser, DB, Script. Ich tippe in diesem Fall auf Script, denn der Browser hält sich an die HTTP-Header und die DB ans Charset (Kollation ist was anderes). Also: Mit welchen Zeichensatz sind deine Scripte gespeichert; hast du deine IDE auf UTF-8 eingestellt?
                  Wenn du diesen nicht weiter verfolgst, kannst du doch nicht unterstellen, dass niemand eine Idee hatte.

                  Beantworte dir selbst einfach onemorenerds Fragen und lies dir mal was zum Thema PHP: Multibyte String - Manual durch.

                  Alle anderen Hinweise hier zielen darauf ab, dass das was du versuchst Blödsinn ist und du es gleich richtig machen solltest, damit du solche Probleme gar nicht erst bekommst.

                  Gruß,

                  Amica
                  [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                  Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                  Super, danke!
                  [/COLOR]

                  Comment

                  Working...
                  X