htmlspecialchars() gibt nicht das Zeichen sondern den Code aus

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

  • htmlspecialchars() gibt nicht das Zeichen sondern den Code aus

    Hallo Leute,

    bei mir gibt es folgendes Phänomen:

    Ich möchte gerne einen String (O'Donnell) mit einem Hochkomma (') per htmlspecialchars() für die Ausgabe vorbereiten. Der String kommt dabei aus einer Datenbank, in der die Werte in UTF-8 abgespeichert sind. Die Seite ist ebenfalls in UTF-8.

    Wenn ich den String durch htmlspecialchars schicke, ersetzt er mir natürlich das Hochkomma durch & #039;. Leider wird dann auf der HTML Seite O& #039;Donnell ausgegeben und nicht O'Donnell.

    Wenn ich den String manuell durch htmlspecialchars("O'Donnell"), wir er dann korrekt als Hochkomma ausgeben.

    Welche Gründe könnte es haben, dass die Ausgabe mit dem Datenbankwert nicht funktioniert?

    Danke für die Hilfe.

    Gruß Tarlar
    Zuletzt geändert von Tarlar; 04.01.2013, 14:16.

  • #2
    Er steht schon falsch in der DB.
    Oder es findet noch eine weitere Umwandlung statt.

    Denn die Funktion weiß nix über DBs.
    Wir werden alle sterben

    Kommentar


    • #3
      Wie kann ich denn überprüfen, ob der String die korrekte Codierung enthält?

      Kommentar


      • #4
        Zitat von Tarlar Beitrag anzeigen
        Wie kann ich denn überprüfen, ob der String die korrekte Codierung enthält?
        Indem du einfach nachschaust? Entweder direkt mit dem MySQL-Client oder mit einem Admin-Tool wie phpMyAdmin.

        Kommentar


        • #5
          Ja, wo und wie ich das nachschaue ist mir schon klar. Sowohl die Datenbank als auch die Tabelle als auch das Feld steht auf utf8. ich habe sogar den Datensatz editiert, damit er von phpmyadmin nochmals korrekt geschrieben wird. Leider hat das keine Auswirkungen.

          Gibt es eine Möglichkeit wie ich in PHP die Informationen des Strings, der aus der Datenbank kommt mit einem String vergleiche, den ich fest im PHP-Code gesetzt habe?

          Kommentar


          • #6
            Zitat von Tarlar Beitrag anzeigen
            Ja, wo und wie ich das nachschaue ist mir schon klar. Sowohl die Datenbank als auch die Tabelle als auch das Feld steht auf utf8. ich habe sogar den Datensatz editiert, damit er von phpmyadmin nochmals korrekt geschrieben wird. Leider hat das keine Auswirkungen.
            Dann ist der Wert richtig gespeichert und du machst bei der Verarbeitung oder Ausgabe etwas falsch. Vermutlich irgendwo ein htmlspecialchars() oder htmlentities() zu viel.

            Kommentar


            • #7
              Sicherlich wird da irgendwie und irgendwo eine zusätzliche Umwandlung durchgeführt, nur lässt sich diese nicht immer einfach umgehen bzw. nicht immer handelt es sich um einen Fehler. Bei einem kleinen Editor habe ich das auch, was ich da als Post an die Vorschau übergebe, muss erst einmal wieder von & bereinigt werden, bevor es erneut bearbeitet werden kann.
              Bei der ersten Umwandlung müsste meiner Meinung nach zusätzlich noch ENT_QUOTES verwendet werden, damit einfache Anführungszeichen zu O' konvertieren und beim zweiten Mal wird dann aus dem enthaltenen & ein &.

              Zuerst solltest Du die Ursachen suchen. Handelt es sich um keinen Fehler und lassen sich die Ursachen nicht einfach umgehen, so sollte der Parameter double_encode für Abhilfe sorgen.


              Beispiel ohne:

              PHP-Code:
              $ausgabe htmlspecialchars("Beginn O'Donnell Ende\n"ENT_QUOTES);

              echo 
              htmlspecialchars($ausgabe);

              // Im Quelltext:  Beginn O'Donnell Ende 
              Beispiel mit:

              PHP-Code:
              $ausgabe htmlspecialchars("Beginn O'Donnell Ende\n"ENT_QUOTES);

              echo 
              htmlspecialchars($ausgabeENT_QUOTES"UTF-8"false); 

              Kommentar

              Lädt...
              X