Ankündigung

Einklappen
Keine Ankündigung bisher.

htmlentities() mag kein UTF-8

Einklappen

Neue Werbung 2019

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

  • htmlentities() mag kein UTF-8

    Hallo Leute

    Ich hab grad ein kleines Problem und blick nicht richtig durch, wie ich das beheben könnte. Folgende Ausgangslage:

    MySQL Datenbank-Kollation: utf8_unicode_ci
    Eingabestring: "Hällö, wür würden gärne wäs käufen";
    Ausgabe: "Hällö, wür würden gärne wäs käufen"
    Meta: <meta http-equiv="content-type" content="text/html; charset=utf8_unicode_ci">


    Die Eingabe nimmt den Weg über ein Formular (POST) an ein PHP-Script, wo es dann über eine Funktion in die Datenbank geschrieben wird. Wenn ich in der Funktion htmlspecialchars()/htmlentities() aktiviere, kommt es komisch in der DB an, ansonsten so wie es eingegeben ist. Hat einer ne Ahnung, was da schief laufen könnte? Mir sind die Ideen ausgegangen.

    Greetz Igäl
    Das Recht auf Dummheit gehört zur Garantie der freien Entfaltung der Persönlichkeit.
    Mark Twain

  • #2
    Das ist falsch:
    <meta http-equiv="content-type" content="text/html; charset=utf8_unicode_ci">

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

    Wichtiger aber ist das Mitsenden eines header('Content-type: text/html; charset=utf-8');
    Wobei dann deine PHP-Skripte auch in UTF-8 abgespeichert werden sollten.

    Kommentar


    • #3
      Hm.... mit htmlspecialchars hats irgendwie besser geklappt als mit htmlentities... aber hab das meta dennoch korrigiert. Vielen Dank
      Das Recht auf Dummheit gehört zur Garantie der freien Entfaltung der Persönlichkeit.
      Mark Twain

      Kommentar


      • #4
        ausserdem hat htmlspecialchars noch ein 3-er parameter, der sehr wichtig sein kann.
        Slava
        http://bituniverse.com

        Kommentar


        • #5
          Jo... hab ich dabei berücksichtigt...

          htmlspecialchars($var, ENT_NOQUOTES, UTF-;
          Das Recht auf Dummheit gehört zur Garantie der freien Entfaltung der Persönlichkeit.
          Mark Twain

          Kommentar


          • #6
            Bitte nicht töten für das Ausgraben

            Danke für den Beitrag, hat letztlich auch so geklappt, denn vorher wurde "Jäger" zu "J&Atilde;&curren;ger" umgewandelt. Jetzt mit
            PHP-Code:
            htmlentities($_POST['nachname'], ENT_QUOTES"UTF-8"); 
            klappt es wunderbar. In Igäls Beispiel fehlen noch die Anführungsstiche um das UTF-8.

            Kommentar


            • #7
              Dafür hat er ein cooles Smilie gezaubert
              Richtig, die Anführungszeichen fehlten hier.
              [url]www.php-maven.org[/url] PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
              Twitter @ [url]https://twitter.com/#!/mepeisen[/url] und Facebook @ [url]http://t.co/DZnKSUih[/url]

              Kommentar


              • #8
                Und da stellt sich mir wieder die Frage, wozu in drei Teufels Namen man Umlaute bei einer Unicode-Kodierung in Entitäten umwandeln muss. Nutzt doch einfach htmlspecialchars().
                Refining Linux: “[url=http://www.refining-linux.org/archives/65/Performing-push-backups-Part-1-rdiff-backup/]Performing Push Backups – Part 1: rdiff-backup[/url]”

                Kommentar


                • #9
                  Also specialchars wandelt nur so was wie ", > und & um, aber äöü bleiben in UTF-8 bestehen?

                  Ich will nur HTML und solche Dinge maskieren, denn die Sachen kommen in eine MySQL Datenbank und da muss alles steril sein. specialchars ist dann kein Sicherheitsrisiko gegenüber entities?

                  Kommentar


                  • #10
                    Ja, und nein: kein Sicherheitsrisiko.
                    Umlaute in Entitäten umzuwandeln ist bei Unicode ziemlich überflüssig. Es gibt natürlich einige exotische Ausgabegeräte, die immer noch kein Unicode können, aber bei denen wird es eh Probleme geben, da Nicht-ASCII-Zeichen mit mehreren Bytes kodiert werden, in UTF-8 mit 2 bis 4.
                    Refining Linux: “[url=http://www.refining-linux.org/archives/65/Performing-push-backups-Part-1-rdiff-backup/]Performing Push Backups – Part 1: rdiff-backup[/url]”

                    Kommentar


                    • #11
                      Also reicht htmlspecialchars völlig aus, entities wandelt zusätzlich nur noch die Umlaute um? Oder sind da noch andere Zeichen, die dann nicht umgewandelt werden?

                      Kommentar


                      • #12
                        Ja.
                        Für Weiteres [MAN]htmlspecialchars[/MAN]() vs. [MAN]htmlentities[/MAN]().
                        Refining Linux: “[url=http://www.refining-linux.org/archives/65/Performing-push-backups-Part-1-rdiff-backup/]Performing Push Backups – Part 1: rdiff-backup[/url]”

                        Kommentar

                        Lädt...
                        X