In Datei schreiben - Anführungs-Zeichen aber nicht unwandeln
RobertF
- php
0 Fabian Transchel0 Tom0 Tom0 Fabian Transchel
0 Candid Dauth0 wahsaga
Hallo,
ich möchte gerne in eine Datei schreiben. Klappt soweit auch ganz gut. Nur werden automatisch alle Anführungszeichen (") umgewandelt (in ").
Wie kann ich das verhindern?
MfG
Philipp
Hallo,
ich möchte gerne in eine Datei schreiben. Klappt soweit auch ganz gut. Nur werden automatisch alle Anführungszeichen (") umgewandelt (in ").
Indem du auf den zu schriebenden Text stripslashes() oder wenn nötig stripcslashes() anwendest. Weiteres liest du bitte in der Dokumentation nach. Für dieses Vorgehen ist es nämlich wichtig, dass du verstehst, warum du stripslashes verwenden möchtest, und damit du den Text sauber wieder aus der Datei herausbekommst. BTW: Was spricht dagegen, den Text escaped 'reinzuschreiben?
Grüße aus Barsinghausen,
Fabian
Hello,
BTW: Was spricht dagegen, den Text escaped 'reinzuschreiben?
Huch! Das solltest Du aber inzwischen wissen.
In Datenhaltungen (DB-Tabelle, Flatfile, Raw-Variablen im Speicher) gehören immer Raw-Daten, also nur Zeichen, die für die jeweilige Datenhaltung das neutrale Format bedeuten.
Viel wesentlicher ist es, das Speicherformat der Datei genau festzulegen. Wenn man sich für "Textdateien", also serielle Dateien mit variabler Satzlänge und Zeilenendezeichen benutzt, darf dieses Zeilenendezeichen in den Daten selber nicht vorhanden sein. Man muss es also vorher ersezten.
Was gut funktioniert ist:
Backslashes (rekursiv) aus dem ($_POST-)Variablen entfernen, wenn
PHP automatisch welche hinzugefügt hat. --> get_magic_quotes_gpc()
Alle chr(4)-Zeichen aus den Daten gegen Leerzeichen ersetzen
(dürften keine drin sein)
alle chr(127)-Zeichen aus den Daten gegen Leerzeichen ersetzen
(dürften keine drin sein)
Alle Zeilenendezeichen in den Daten gegen chr(127) ersetzen
Datenfelder mit chr(4) und implode() aneinanderfügen und ein
Zeilenendezeichen anhängen.
Datensatz abspeichern.
Nach dem Holen der Daten muss man das dann Schrit für Schritt rückgängig machen. Nur die Slashes muss man nicht sieder einfügen ;-)
Aber dafür muss man die auszugegebenen Daten HTML-gerecht aufbereiten, abhängig davon, in welchem Kontext sie ausgegeben werden sollen:
- normaler HTML-Text
- Textarea, values von inputs
- Links
- Parameter von Links
Ich hoffe, ich konnte dich da noch ein bisschen verwirren. Mach so 30 bis 50 abgegrenzte Versuche, dann wird Dir alles klar.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hello,
Nach dem Holen der Daten muss man das dann Schrit für Schritt rückgängig machen. Nur die Slashes muss man nicht sieder einfügen ;-)
Die Leerzeichen für "böse Zeichen" (#4/#127) muss man natürlich auch nicht zurückersetzen. Wir gingen ja davon aus, dass die sowieso nicht drin sein durften. Ein TAB könnte allerdings schon mal in einer Textarea stecken.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hi,
BTW: Was spricht dagegen, den Text escaped 'reinzuschreiben?
Huch! Das solltest Du aber inzwischen wissen.
Ich hoffe, ich konnte dich da noch ein bisschen verwirren. Mach so 30 bis 50 abgegrenzte Versuche, dann wird Dir alles klar.
Ja, konntest du. Ich habe lange keine Inhaltskontrolle dieser Form mehr betrieben (/betreiben müssen), das gebe ich zu.
Grüße aus Barsinghausen,
Fabian
Hallo du da draußen,
vermutlich bekommst du die Daten, die du in die Datei schreiben möchtest, über ein Formular. Und in deiner PHP-Konfiguration ist magic_quotes_gpc aktiviert. Dadurch werden diverse Zeichen maskiert.
Was du dagegen tun kannst:
Entweder du setzt magig_quotes_gpc auf off (in der php.ini oder in einer .htaccess, soweit du das darfst).
Oder du fragst mit der Funktion get_magic_quotes_gpc() ab, ob es gesetzt ist, und wenn ja, wendest du die Funktion strip_slashes (http://php.net/strip_slashes) auf den String.
Grüße von hier drinnen, aus Biberach an der Riss (http://www.stadt-biberach.de/),
Candid Dauth (Dogfish)
Hallo du da draußen,
Oder du fragst mit der Funktion get_magic_quotes_gpc() ab, ob es gesetzt ist, und wenn ja, wendest du die Funktion strip_slashes (http://php.net/strip_slashes) auf den String.
Oje, es muss natürlich stripslashes heißen (ohne Unterstrich).
Grüße von hier drinnen, aus Biberach an der Riss (http://www.stadt-biberach.de/),
Candid Dauth (Dogfish)
hi,
Klappt soweit auch ganz gut. Nur werden automatisch alle Anführungszeichen (") umgewandelt (in ").
Wie kann ich das verhindern?
lesen bildet: http://www.dclp-faq.de/q/q-magic-quotes.html
gruss,
wahsaga