UTF8, Sonderzeichen und mySQL

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

  • 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?
    Zuletzt geändert von 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?

    Kommentar


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

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

      Kommentar


      • #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]

        Kommentar


        • #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"...
          Zuletzt geändert von DumbleOpun; 01.06.2010, 18:06.

          Kommentar


          • #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.

            Kommentar


            • #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...

              Kommentar


              • #8
                Keiner eine Idee?

                Kommentar


                • #9
                  Hallo,

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

                  Zitat von onemorenerd Beitrag anzeigen
                  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]

                  Kommentar

                  Lädt...
                  X