Entities NICHT umwandeln
fr@gma
- php
0 Brotmensch0 fr@gma0 Brotmensch1 dedlfix
1 dedlfix0 Der Martin
Hallo Leute,
ich wandle zum Speichern in MySQL alle Sonderzeichen mit htmlspecialchars() um.
Nun suche ich aber in den Eingabedaten auch nach Links und schreibe die HTML-Entsprechung „<a href=\"...\">
“ Slash-geschützt, also nicht in Entities in die Datenbank.
Nun habe ich das Problem, dass ich die Ausgabe ja mit htmlentities() wieder umwandeln müsste, um ungewollte Formatierungen zu vermeiden.
Ihr merkt sicher wo ich hin will, die von mir selbst erzeugten Link-Formatierungen sollen dabei nicht betroffen sein.
Wie kann ich nun die Daten exakt so an den Browser ausgeben, wie diese in der Datenbank gespeichert sind (also ohne Umwandlung der Entities)?
Ich steh gerade irgenwie auf dem Schlauch!
Hi,
Hallo Leute,
ich wandle zum Speichern in MySQL alle Sonderzeichen mit htmlspecialchars() um.
Wozu machst du sowas Unsinniges?
gruß
Brotmensch
Hallo,
zunächst, danke für Eure Antworten.
Leider hilft mir hier nichts weiter.
ich wandle zum Speichern in MySQL alle Sonderzeichen mit htmlspecialchars() um.
Wozu machst du sowas Unsinniges?
Das habe ich beschrieben. Ich möchte eventuelle HTML-Angaben im Formular von meinen Link-Formatierungen trennen, um diese bei der Ausgabe erkennen zu können.
Meine Frage war, wie kann ich die Entities für die Ausgabe beibehalten UND die von mir gesetzten Link-Formatierungen aber ermöglichen!
Eine komplette Ausgabe mit htmlspecialchars() ist da Quatsch, da die Links so nicht klickbar wären, oder?
Hallo,
du bist da womöglich auf der falschen Fährte, dir scheinen eine Menge Grundlagen zu fehlen. Zeige doch bitte erstmal auf, was du in die DB reinschreiben möchtest und was du in deinem HTML-Dokument dann gerne haben würdest.
Sicherlich ist das Problem ein triviales.
grüße
Brotmensch
Hi!
ich wandle zum Speichern in MySQL alle Sonderzeichen mit htmlspecialchars() um.
Wozu machst du sowas Unsinniges?
Das habe ich beschrieben. Ich möchte eventuelle HTML-Angaben im Formular von meinen Link-Formatierungen trennen, um diese bei der Ausgabe erkennen zu können.
Zunächst einmal solltest du zwischen den beiden Schritten DBMS und HTML trennen. Wenn du etwas ins DBMS schreiben willst, vergiss, dass das HTML oder sonstwas ist. Betrachte nur die einzelnen Zeichen und schreib diese DBMS-gerecht.
Dann wende dich der Ausgabe zu. Da hast du nun ein Problem, weil - wenn ich das richtig verstehe - du zwar kein HTML generell zulassen willst, aber Links erlauben willst - also ein bisschen HTML. Und nun willst du wissen, wie man das auseinanderklamüsern kann? Am besten macht man sowas nicht und nimmt stattdessen BBCode oder was ähnliches. Dann kannst du htmlspecialchars() auf den Text anwenden (aber wegen der BBCode-Syntax die " auslassen (gibt einen Parameter dafür), die muss man im Fließtext sowieso nicht maskieren). Anschließend preg_replace() auf die BBCode-URLs ansetzen.
Lo!
Hi!
ich wandle zum Speichern in MySQL alle Sonderzeichen mit htmlspecialchars() um.
Das ist Unfug. Für MySQL müssen dessen Sonderzeichen beachtet werden, nicht die von HTML oder sonst einem anderen System.
Nun habe ich das Problem, dass ich die Ausgabe ja mit htmlentities() wieder umwandeln müsste, um ungewollte Formatierungen zu vermeiden.
Da hast du ja das Problem schon selbst erkannt.
Wie kann ich nun die Daten exakt so an den Browser ausgeben, wie diese in der Datenbank gespeichert sind (also ohne Umwandlung der Entities)?
Kontextwechsel richtig beachten. Also nur den aktuellen Kontext beachten und behandeln und die anderen Kontexte zu ihrer Zeit.
Lo!
Hallo,
ich wandle zum Speichern in MySQL alle Sonderzeichen mit htmlspecialchars() um.
das ist eine ganz schlechte Idee. Warum willst du In der DB speziell für den HTML-Kontext aufbereitete Inhalte ablegen? Der Einsatz von htmlspecialchars() wäre eigentlich beim Auslesen angebracht, genauer gesagt, in dem Moment, wo du die Daten für HTML aufbereites.
Nun suche ich aber in den Eingabedaten auch nach Links und schreibe die HTML-Entsprechung „
<a href=\"...\">
“ Slash-geschützt, also nicht in Entities in die Datenbank.
Hä?
Ihr merkt sicher wo ich hin will, die von mir selbst erzeugten Link-Formatierungen sollen dabei nicht betroffen sein.
Nein, ich versteh's nicht so ganz.
Wie kann ich nun die Daten exakt so an den Browser ausgeben, wie diese in der Datenbank gespeichert sind (also ohne Umwandlung der Entities)?
Ich steh gerade irgenwie auf dem Schlauch!
Der erste Schritt sollte sein, die Umwandlung mit htmlspecialchars() beim Eintragen in die DB wegzulassen. Speichere die Daten kontextneutral. Lediglich die notwendige Maskierung für die mySQL-Textschnittstelle mit mysql_real_escape_string() ist angeraten - aber die ist ja gerade darauf ausgelegt, dass die Nutzdaten *nicht* verändert werden.
So kannst du auch mühelos in der DB suchen oder andere Operationen und Verknüpfungen mit deinen Daten anstellen.
Der zweite Schritt muss sein, die aus der DB gelesenen Daten beim Ausgeben als HTML (und erst dann!) mit htmlspecialchars() zu maskieren, wenn HTML-Sonderzeichen "wörtlich" wiedergegeben und nicht interpretiert werden sollen.
So long,
Martin