• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

html codes aus string filtern und gar nicht anzeigen

Tobi44

Mitglied
Hallo,

stehe hier gerade wieder mal vor einem Problem.

Innerhalb von 24 Stunden ist es wiederholt vorgekommen, dass 2 unterschiedliche User irgendetwas gepostet haben, was HTML-Zeichen wie &#65289 enthält. Diese filtere ich mit htmlspecialchars aus. Das Dumme daran ist nur, dass mir dieses Zeichen dann zwar nicht angezeigt wird, aber eben als &#65289 da steht, was ja irgendwie genauso dumm ist.

Gibt es da zufällig eine Funktion, von der ich wieder nichts weiß?

Danke.
 
Werbung:
Sind deine User so intelligent diese Zeichen aus dem Internet zu suchen oder wandelst du deren zeichen beim speichern um oder wandelst du die Zeichen erst beim ausgeben um?

Beim Speichern halte ich es für eine gute Idee und es sollte so bleiben. Wenn deine User dann selbst soetwas schreiben wie &....; sind sie selber schuld, dass es auf deiner Seite falsch angezeigt wird.

Wenn du aber beim ausgeben alles änderst bist du selber schuld. Und falls du beim Speichern und beim ausgeben den Text änderst bist du noch viel mehr schuld. :-D

Bitte um aufklärung und darum, dass du den code postest wie du deine Daten speicherst und anzeigst.

(beim speichern vom holen der daten aus dem POST und beim anzeigen ab dem holen aus mysql)

lg
 
Hallo und danke für Deine Antwort.

Natürlich wird es meine Schuld sein. :)

Es handelte sich bei dem letzten Vorfall um einen japanischen oder sonstwoher stammenden User. Bei dem war ein Komma , und eine Klammer zu ) nicht ein normales Komma und eine normale Klammer, sondern irgendwie eines in HTML-Sondersprache mit &#xxx;

Beim Posten eines Eintrages sieht das so aus:
PHP:
$filter = array("'", '"', "´", "`");
$text = trim($_POST['text_nt']);
$text_nt = str_replace($filter, "’", $text);

Die Ausgabe findet so statt:
PHP:
$thematext2 = nl2br(htmlspecialchars($row['text']));
Demnach findet sich in der Datenbank die komischen Zeichen als komische Zeichen, und bei der Ausgabe stehen sie für jeden lesbar im Klartext ohne Umwandlung...

Wenn ich ein htmlspecialchars direkt beim Posten des Eintrages für den Text setze, dann steht das Zeichen wohl als Klartext &#xxx; ohne Umwandlung in der DB, aber wohl auch bei der Ausgabe genauso oder?

Danke,
Tobi
 
Werbung:
Du solltest deinen Server erst einmal nicht damit belasten, die Texte erst bei der Ausgabe umzuwandeln.

Hier mein Vorschlag, wie die Daten gespeichert werden sollten.

PHP:
// prüfen ob das Formular abgeschickt wurde

// dein $filter und str_replace konstrukt kannst du weglassen.
// Das was du erreichen wolltest, wird hier durch ENT_QUOTES und später
// durch mysql_real_escape_string erreicht.
$sText = nl2br(
    htmlspecialchars(
        trim($_POST['text_nt']),
        ENT_QUOTES
    )
);

// wenn du mit mysqli arbeitest musst du diese Funktion natürlich umbenennen
mysql_query("
    INSERT INTO `beitraege` (
        `text`,
        `...`,
        `...`
    ) VALUES (
        '" . mysql_real_escape_String($sText) . "',
        '...',
        '...'
    )
");

Nachdem du das umgesetzt und getestet hast, schicke bitte nocheinmal den code vom speichern und ausgeben und diesmal bitte inclusive der querys. :)

lg
 
Verwendest Du für die Eingabe ein einfaches Textarea oder einen RichTextEditor wie tinymce? Hast Du denn die Chance diese Code-Eingabe vom Nutzer zu simulieren, d.h. kannst Du selbst so ein Zeichen eintragen und abschicken? Wenn ja, was steht dort konkret im String vor der Speicherung? Und: welchen Zeichensatz hat die Spalte in der Du den Text speicherst?
 
Hallo,

ich habe Eure Beiträge gelesen und wollte mich dafür bedanken. Leider bin ich noch nicht dazu gekommen, es zu testen. Werde mich aber demnächst wieder hier melden.

Edit: Es wird eine einfache textarea verwendet und alle Spalten in der DB haben utf8_general_ci.
Die PHP-Dateien auf dem Server haben eine ANSI-Kodierung, das HTML-Gerüst hat iso-8859-1.

Danke,
Tobi
 
Werbung:
Schreib in den Head deiner HTML Dateien in dem <meta> tag mal utf8 rein und speicher alle dateien als utf8. dann solltest du dein problem beheben können.
 
Ich hätte ehrlich gesagt erwartet, dass du meine vorherige lösung schon umgesetzt hast, einfach nur weil sie besser funktioniert als deine lösung.

Aber kurz: Ja, das wäre auch nötig. Es ist heutzutage meistens sinnvoller in UTF8 zu arbeiten als in anderen Zeichensätzen. (Kommt aber wiederum auch darauf an woher man kommt ^^)
 
Werbung:
Hallo,

bin aktuell dabei, eine neue Webseite zu erstellen.

Dabei hatte ich standardmäßig auch wieder das iso-8859-1 im head verwendet und im Notepad++ eine ANSI-Kodierung drin.
Dabei fiel mir auf, dass beim Speichern von Daten in der mysql-Tabelle mit utf8-general-ci-Kodierung Umlaute als ä dargestellt wurden (sind so in der Datenbank gespeichert)

Daraufhin habe ich im Notepad++ auf UTF-8 umgestellt und im meta ein utf-8 gesetzt.

Leider werden alle Daten nach wie vor als komische Zeichen gespeichert.

So langsam werde ich das Gefühl nicht mehr los, dass ich das Problem nie in den Griff bekommen werde. Das wird mich nie los lassen. Woran liegt das nur?

Update:
Habe gerade getestet, ein Ä in der Datenbank manuell zu speichern. Dieses wird nun in der Datenbank als Ä angezeigt, aber auf der Webseite bei der Ausgabe als - die Datei hat auch utf-8 und ist in dieser Kodierung gespeichert. Verdammte sch...!
 
Schicke uns bitte einen Link zu deiner Seite oder Poste hier bitte den kompletten <head></head> bereich der Seite, auf welcher das Zeichen falsch angezeigt wird inklusive aller Header die mitgesendet werden, wenn man die Seite aufruft.
 
Werbung:
Die Spalten haben alle eine Sortierung nach utf8_general_ci.

Auch in phpmyadmin wird mir als Kollation utf8_general_ci angezeigt.
 
Sind deine Dateien auch alle UTF8 kodiert? Wie sind die Header, welche bei der Seite mitgesendet werden? Bitte schicke uns doch einfach einen Link... ^^
 
Werbung:
Ich kann keinen Link schicken.

Wie bereits gesagt, waren die Dateien zuvor im ANSI-Format (laut Notepad++), ich habe diese nun auch im UTF-8 gespeichert und hochgeladen.

Was meinst Du mit "Header, welche bei der Seite mitgesendet werden"?

Danke.
 
An mysql wird kein set names geschickt. Behebt das meinen Fehler? Wie genau muss ich das machen? Wo kommt welcher Befehl rein? Am besten in der Datei, welche die Datenbankverbindung enthält und welche in jede Seite inkludiert wird?
 
Werbung:
Vielen Dank, nachdem ich mir nun knapp 5 Millionen Ergebnisse durchgelesen habe, klappt es scheinbar.

Vorsichtige Frage: Im Notepad utf-8 oder utf-8 ohne bom auswählen?
 
Zurück
Oben