SONDERZEICHEN in Formular löschen [SOH]
max
- php
Ich schreibe aus einem Formular in meine Datenbank, wenn ich Text aus Word in das Formular rüberziehe, speichert es mir aber auch irgendwelche Daten ab die ich raus haben möchte:
Beispiel:
Märchenwald [SOH] Hexe [SOH] Wald
Wobei [SOH] schwarz hinterlegt und nur im Editor sichtbar wird (Notepad++).
Wie kann ich solche Informationen aus dem Formular löschen???
MAX
Hallo,
Ich schreibe aus einem Formular in meine Datenbank, wenn ich Text aus Word in das Formular rüberziehe, speichert es mir aber auch irgendwelche Daten ab die ich raus haben möchte:
Word macht gern irgendwelchen Unfug in der Art.
Beispiel:
Märchenwald [SOH] Hexe [SOH] Wald
Wobei [SOH] schwarz hinterlegt und nur im Editor sichtbar wird (Notepad++).
SOH (\x01 oder U+0001) ist ein ASCII-Steuerzeichen. Vermutlich benutzt Word dieses Steuerzeichen als Feld-Trennezichen in Tabellen. - Es geht doch um das Kopieren aus Word-Tabellen, oder? Denn normaler Text lässt sich aus Word nach meiner Erfahrung problemlos kopieren.
Wie kann ich solche Informationen aus dem Formular löschen???
So wie jedes andere unerwünschte Zeichen auch, z.B. mit str_replace().
Ciao,
Martin
Ok ein bischen verstehe ich es nun, aber nur ein bischen
das in meinem String das besagtes Steuerzeichen drin ist.
Laut Tabelle http://de.wikipedia.org/wiki/Steuerzeichen
ist es hex 0x01!
Aber wie schaffe ich es, dem Befehl "str_replace" zu erklären das er nach einer HEX Codierung suchen muss und nicht nach der Buchstabenkombination?
Mein Ansatz wäre:
str_replace('#0x01', '', $string);
ws aber leider nicht von Erfolg gekrönt wurde??
Max
Tach!
Aber wie schaffe ich es, dem Befehl "str_replace" zu erklären das er nach einer HEX Codierung suchen muss und nicht nach der Buchstabenkombination?
Mein Ansatz wäre:
Du kannst auch noch weiter probieren, aber wie es konkret geht, sagt dir das PHP-Handbuch: Strings
dedlfix.
Sorry, aber das kapier ich überhaupt nicht!
Max
Tach!
Sorry, aber das kapier ich überhaupt nicht!
Was konkret? Mit dem x warst du doch schon auf dem richtigen Weg. Das wird allgemein verwendet, um einen Hex-Wert zu notieren. Das Handbuch führt als Sequenz auf: \x[0-9A-Fa-f]{1,2}. Auch wenn du den regulären Ausdruck nicht verstehst, sollte doch zumindest der Anfang \x einen Versuch wert sein - und dahinter dann die Hex-Zahl deines Zeichens.
dedlfix.
[latex]Mae govannen![/latex]
Wie kann ich solche Informationen aus dem Formular löschen???
So wie jedes andere unerwünschte Zeichen auch, z.B. mit str_replace().
In diesem Fall (da man nicht ausschließen kann, daß Würg^wWord gegebenenfalls weitere (Sonder|Steuer)zeichen einfügen könnte) würde ich preg_replace() bevorzugen, damit kann man direkt eine oder mehrer Zeichen-Bereiche definieren; bspw. direkt alles von 0x00 bis 0x1F außer eventuell 0x09, 0x0A, 0x0D (falls letztere erwünscht sind)
Stur lächeln und winken, Männer!
Kai
Array(16).join("x" - 1) + " Batman!"
Muss ich die dann alle einzeln Definieren?
Max
[latex]Mae govannen![/latex]
Wie kann ich solche Informationen aus dem Formular löschen???
So wie jedes andere unerwünschte Zeichen auch, z.B. mit str_replace().
In diesem Fall (da man nicht ausschließen kann, daß Würg^wWord gegebenenfalls weitere (Sonder|Steuer)zeichen einfügen könnte) würde ich preg_replace() bevorzugen, damit kann man direkt eine oder mehrer Zeichen-Bereiche definieren; bspw. direkt alles von 0x00 bis 0x1F außer eventuell 0x09, 0x0A, 0x0D (falls letztere erwünscht sind)
Stur lächeln und winken, Männer!
Kai
``
Tach!
Muss ich die dann alle einzeln Definieren?
Nein, nicht unbedingt. Es gibt da mehrere Möglichkeiten. Zum einen kann man einen Bereich Von-Bis mit einer for-Schleife durchlaufen und in ihr die Ersetung vornehmen. In der Schleife kann man auch noch bei bestimmte Zeichen die Ersetzung überspringen, falls du ein oder mehrere Steuerzeichen drinlassen willst. Zum anderen kann man eine Ersetzung mit einem regulärem Ausdruck verwenden. Auch bei dieser kann man einen Bereich festlegen. Aber wenn es Ausnahmen geben soll, hilft dann doch nur die Einzelaufzählung (in einer Zeichenklasse). Vorteil des RegExp ist, dass man mit nur einem preg_replace() und nur einem regulärem Ausdruck auskommt statt 32 (oder weniger) einzelne str_replace() zu notieren.
dedlfix.
Ja ist es da nicht sinnvoller nur einen bestimmten Zeichensatz zu erlauben der in ein Formularfeld kommen kann, als zu verbieten was alles nicht rein darf, was ja wahrscheinlich mehr sein wird als was rein darf...
Max
Hallo,
Ja ist es da nicht sinnvoller nur einen bestimmten Zeichensatz zu erlauben der in ein Formularfeld kommen kann, als zu verbieten was alles nicht rein darf, was ja wahrscheinlich mehr sein wird als was rein darf...
nein, im Geigentiel. Die Zahl der nicht erlaubten Zeichen ist normalerweise überschaubar; entweder ist es -wie schon erwähnt- der gesamte Wertebereich von \x00 bis \x1F, oder zwei bis drei Teilbereiche daraus. Die Zahl der erlaubten Zeichen dürfte dagegen in die Tausende gehen - zumindest wenn wir von Text-Eingabefeldern reden. Wenn es um Zahlen- oder Datumseingaben geht, mag das wieder anders aussehen.
Ciao,
Martin
[latex]Mae govannen![/latex]
Ja ist es da nicht sinnvoller nur einen bestimmten Zeichensatz zu erlauben der in ein Formularfeld kommen kann, als zu verbieten was alles nicht rein darf, was ja wahrscheinlich mehr sein wird als was rein darf...
Die Menge der "verbotenen" Zeichen dürfte wesentlich geringer sein, denke nur an ô é à und viele mehr.
Der Bereich unterhalb des Leerzeichens (0x20) ist überschaubar:
Entweder alle 31 Zeichen oder (wenn man TAB, CR, LF) 28 Zeichen. Das kann man leicht definieren.
[\x00-\x1F]
bzw.
[\x00-\x08\x11\x12\x14-\x1F]
Stur lächeln und winken, Männer!
Kai
Array(16).join("x" - 1) + " Batman!"
Danke für die Hilfe!
Max