Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelle eintr.
Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelle eintr.
am 01.07.2005 16:17:13 von xylux
MYSQL 3.1/PHP4.1
Hallo,
komme trotz googeln /FAQ nicht weiter...
Ich habe ein Formular in das Nutzer beliebige Inhalte aus _ Webseiten _
kopieren.
Danach wandert alles in eine Mysql-Tabelle und wird später zum Editieren
wieder in ein Formular eingelesen.
Funktioniert alles bis auf die Codierung der Sonderzeichen. Die Umlaute
werden bei der Ausgabe nicht korrekt dargestellt und Anführungszeichen
bereiten ebenfalls Probleme.
Bei einigen Kopieraktionen funktioniert es, bei anderen wieder nicht !
Die Daten aus den Formularfeldern zum Absenden nach MYSQL baue ich bisher so
zusammen:
....
$sql.=" '".htmlspecialchars($_POST['autor'],ENT_QUOTES)."', ";
....
in meiner Verzweifelung habe ich auch dies probiert:
$sql.="'".htmlentities(htmlspecialchars($_POST['koautor'],EN T_QUOTES),ENT_QUOTES)."',
";
....
In die Formularfelder lese ich sie so ein:
Ich bin mir im Klaren, dass diese Probleme hier oft besprochen wurden, komme
aber trotzdem nicht weiter.
Frage:
Kann mir hier jemand einfach einmal ein Codeschnipsel für insert und select
posten?
Es geht mir nur ums korrekte en-/decoden.
Danke schon vorab
Gruß
Hans
Re: Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelle eintr.
am 01.07.2005 21:38:01 von Sebastian Hirschmann
H.Armgart schrieb:
> Funktioniert alles bis auf die Codierung der Sonderzeichen. Die Umlaute
> werden bei der Ausgabe nicht korrekt dargestellt und Anführungszeichen
> bereiten ebenfalls Probleme.
Warum machst Du Dir das so kompliziert? Lt. PHP-Manual:
| htmlentities -- Wandelt *alle* Sonderzeichen in entsprechende
| HTML-Codes um
Klartext: Alles, wofür's HTML-Entitäten gibt, wird auch in solche
umgewandelt. Und IMVHO genügt eine einfache Runde mit der Funktion, d.h.
wahlweise beim Ein- oder beim Auslesen.
htmlentities beinhaltet nach meinem Verständnis auch die Funktionalität
von htmlspecialchars.
Grüße
Sebastian
--
Rock, Metal, more: http://bleeding.4metal.net
Ich bin der einzige Typ auf der Welt, der erst aufwachen muss, um
einen Alptraum zu haben. [Al Bundy]
Re: Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelle eintr.
am 01.07.2005 22:14:19 von xylux
Hallo Sebastian,
> | htmlentities -- Wandelt *alle* Sonderzeichen in entsprechende
> | HTML-Codes um
>
> Klartext: Alles, wofür's HTML-Entitäten gibt, wird auch in solche
> umgewandelt. Und IMVHO genügt eine einfache Runde mit der Funktion, d.h.
> wahlweise beim Ein- oder beim Auslesen.
> htmlentities beinhaltet nach meinem Verständnis auch die Funktionalität
> von htmlspecialchars.
....so ähnlich habe ich angefangen.
Dann haben ein paar User fleißig Text aus Webseiten in das Formular kopiert
und abgespeichert - da hatte ich dann die beschriebenen Probleme. Mysql hat
z. T. die Feldinhalte nicht gespeichert. Eine erneute Eingabe funktionierte
ebenfalls nicht mehr.
Du meinst das z.B. beim Zusammenbau des SQL Update-String so ?
$sql.=" ' ".htmlentities($_POST['xytxt'],ENT_QUOTES)." ', ";
und beim Einlesen in das Formular
??
Das funktioniert nicht immer.
Kann das mit dem Zeichencode der Webseite zusammenhängen aus der kopiert
wird?
In Googel habe ich einen Hinweis auf UTF-8. Kann MYSQL aber wohl nicht in
der mir zur Verfügung stehenden Version verarbeiten.
Ich habe mich damit noch nicht intensiv beschäftigt, vorher mit dem
MS-SQL-Server/ASP gearbeitet und bin etwas in Zeitdruck geraten.
Deshalb meine Frage nach einem funktionierenden Codeschnipsel.
Gruß
Hans
Re: Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelle eintr.
am 04.07.2005 09:04:39 von NineBerry Schwarz
Hallo
H.Armgart schrieb:
> Dann haben ein paar User fleißig Text aus Webseiten in das
> Formular kopiert und abgespeichert - da hatte ich dann die
> beschriebenen Probleme. Mysql hat z. T. die Feldinhalte nicht
> gespeichert.
Verwende zum Maskieren beim Zusammenbauen des SQL-Strings die Funktion
"mysql_escape_string". Formular -> mysql_escape_string -> DB
Zur Ausgabe der Daten verwende "htmlentities":
DB -> htmlentities -> Formular
Neun
Re: Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelleeintr.
am 04.07.2005 15:02:38 von Niels Braczek
NineBerry Schwarz schrieb:
> Verwende zum Maskieren beim Zusammenbauen des SQL-Strings die Funktion
> "mysql_escape_string". Formular -> mysql_escape_string -> DB
s/mysql_escape_string/mysql_real_escape_string/
mysql_escape_string() ist nicht mehr aktuell. Näheres siehe Manual.
MfG
Niels
--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · E-Commerce · Mambo Content Management |
`----------------------------------------------------------- -----´
Re: Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelle eintr.
am 04.07.2005 19:15:43 von xylux
"Niels Braczek" >
>> Verwende zum Maskieren beim Zusammenbauen des SQL-Strings die Funktion
>> "mysql_escape_string". Formular -> mysql_escape_string -> DB
>
> s/mysql_escape_string/mysql_real_escape_string/
>
> mysql_escape_string() ist nicht mehr aktuell. Näheres siehe Manual.
Beiden Vielen Dank, das war's.
Hans
Re: Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelle eintr.
am 09.07.2005 20:16:03 von xylux
> Verwende zum Maskieren beim Zusammenbauen des SQL-Strings die Funktion
> "mysql_escape_string". Formular -> mysql_escape_string -> DB
> Zur Ausgabe der Daten verwende "htmlentities":
> DB -> htmlentities -> Formular
Das funktioniert nicht. Ich will doch die '\' in der Ausgabe wieder
eleminieren !
Oder habe ich da etwas falsch verstanden?
Ich benötige das Gegenstück zu 'mysql_escape_string'.
Ich bekomme folgente Ausgabe nach der Anwendung der Funktion:
blabla\r\n\r\n\r\nblablajöjölj#ö#\r\n\"hhkh\'\r\n
Ich brauche im Formular (
Re: Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelleeintr.
am 10.07.2005 03:12:53 von Niels Braczek
H.Armgart schrieb:
> Ich benötige das Gegenstück zu 'mysql_escape_string'.
Zu mysql_escape_string() gibt es kein Gegenstück. Diese Funktion wird
für den Transport in die Datenbank benötigt und von MySQL vor dem
Eintragen in die Tabelle rückgängig gemacht. Die Daten kommen also so
sauber[tm] zurück, wie sie vor der Behandlung mit mysql_escape_string()
waren.
MfG
Niels
--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · E-Commerce · Mambo Content Management |
`----------------------------------------------------------- -----´
Re: Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelle eintr.
am 10.07.2005 10:09:10 von Kai Ruhnau
Niels Braczek wrote:
> H.Armgart schrieb:
>
>
>>Ich benötige das Gegenstück zu 'mysql_escape_string'.
>
>
> Zu mysql_escape_string() gibt es kein Gegenstück. Diese Funktion wird
> für den Transport in die Datenbank benötigt und von MySQL vor dem
> Eintragen in die Tabelle rückgängig gemacht. Die Daten kommen also so
> sauber[tm] zurück, wie sie vor der Behandlung mit mysql_escape_string()
> waren.
Damit hast du doch dein Gegenstück zu mysql_(real_)escape_string():
$variable="\nHallo''Welt\n";
$escaped=mysql_real_escape_string($variable); //Escapen
mysql_query("SELECT '$escaped'"); //Rückgängig machen
Grüße
Kai
--
This signature is left as an exercise for the reader.
Unsatz des Jahres:
$POLITIKER ruft $PARTEI zur Geschlossenheit.
Re: Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelle eintr.
am 10.07.2005 15:37:47 von xylux
"Kai Ruhnau" schrieb> Niels Braczek
wrote:
> Damit hast du doch dein Gegenstück zu mysql_(real_)escape_string():
>
> $variable="\nHallo''Welt\n";
> $escaped=mysql_real_escape_string($variable); //Escapen
> mysql_query("SELECT '$escaped'"); //Rückgängig machen
... auch auf die Gefahr, dass ich nerve, mein ursprüngliches Problem:
Einkopieren von Textinhalten aus beliebigen(!) Webseiten in ein Formular
Ich habe Niels jetzt so verstanden
(Vorbehandlung mit stripslases)
mit mysql_real_escape_string($_POST['inhalt'] in ein Tabellenfeld
schreiben.
Bei deutschen Seiten meistens OK -
Funktioniert z. B. nicht immer bei ausländischen Seiten / XHTM-Seiten.
(Beispiel: einige Seiten von www.nature.com/www.zeit.de)
Umlaute werden teilweise auch nicht richtig geschrieben/umgesetzt bzw. das
Tabellenfeld bleibt leer / ' " werden bei doppeltem Vorkommen im Textstring
nich immer korrekt escaped.
Da müssen meiner Meinung nach Sonderzeichen durchrutschen. Habe alles auch
schon vorher durch htmlentities geschleust.
Hat auch nicht zuverlässig funktioniert.
Meine Frage: Mit welchen Funktionen, in welcher Reihenfolge muss ich
$_POST['inhalt'] noch weiter 'idiotensicher' vorbehandeln?
Verstanden: mysql_real_escape_string($Tabellenfeld) funktioniert in beide
Richtungen.
Mein Ziel: die Daten aus der Tabelle wieder in ein Textarea-Feld zum
Editieren einlesen und wieder neu abspeichern.
Da taucht dann das Problem mit den fehlenden Zeilenumbrüchen auf.
Bitte um Entschuldigung für mein impertinentes Gefrage.
Hans
Re: Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelle eintr.
am 11.07.2005 05:30:59 von Niels Braczek
H.Armgart schrieb:
> Ich habe Niels jetzt so verstanden
> (Vorbehandlung mit stripslases)
Nur wenn magic_quotes eingeschaltet sind.
> mit mysql_real_escape_string($_POST['inhalt'] in ein Tabellenfeld
> schreiben.
Ja.
> Bei deutschen Seiten meistens OK -
Auch bei anderen. Dein Problem entsteht mit an Sicherheit grenzender
Wahrscheinlichkeit nicht in der Datenbank.
> Funktioniert z. B. nicht immer bei ausländischen Seiten / XHTM-Seiten.
> (Beispiel: einige Seiten von www.nature.com/www.zeit.de)
> Umlaute werden teilweise auch nicht richtig geschrieben/umgesetzt bzw. das
> Tabellenfeld bleibt leer / ' " werden bei doppeltem Vorkommen im Textstring
> nich immer korrekt escaped.
Du musst die Daten umcodieren. Du bekommst von der Website ein
(willkürliches) Encoding, dass auf jenes umgestellt werden muss, auf das
MySQL eingestellt ist.
> Da müssen meiner Meinung nach Sonderzeichen durchrutschen. Habe alles auch
> schon vorher durch htmlentities geschleust.
> Hat auch nicht zuverlässig funktioniert.
Tut es dann aber. Ich habe keine Probleme mit Daten in Urdu, Russisch,
Englisch, Ungarisch usw. in derselben Datenbank.
> Meine Frage: Mit welchen Funktionen, in welcher Reihenfolge muss ich
> $_POST['inhalt'] noch weiter 'idiotensicher' vorbehandeln?
Du brauchst auÃer der Umcodierung nur mysql_real_escape_string().
> Verstanden: mysql_real_escape_string($Tabellenfeld) funktioniert in beide
> Richtungen.
Jein. Man braucht es nur in eine Richtung. Die Decodierung geschieht
transparent.
MfG
Niels
--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · E-Commerce · Mambo Content Management |
`----------------------------------------------------------- -----´
Re: Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelle eintr.
am 11.07.2005 08:34:01 von xylux
"Niels Braczek" schrieb
Hallo Niels,
> Du musst die Daten umcodieren. Du bekommst von der Website ein
> (willkürliches) Encoding, dass auf jenes umgestellt werden muss, auf das
> MySQL eingestellt ist.
Da scheint ja mein Problem zu liegen.
Wie mache ich das?
So(?) habe ich es probiert:
$sql_teilstring.="'htmlentities(mysql_real_escape_string($_P OST['inhalt']))',
";
Wie stelle ich das Encoding auf jenes von Mysql um?
MfG
Hans
Re: Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelle eintr.
am 11.07.2005 14:58:26 von Niels Braczek
H.Armgart schrieb:
> "Niels Braczek" schrieb
>> Du musst die Daten umcodieren. Du bekommst von der Website ein
>> (willkürliches) Encoding, dass auf jenes umgestellt werden muss, auf das
>> MySQL eingestellt ist.
>
> Da scheint ja mein Problem zu liegen.
> Wie mache ich das?
http://de.php.net/manual/en/ref.iconv.php
> So(?) habe ich es probiert:
> $sql_teilstring.="'htmlentities(mysql_real_escape_string($_P OST['inhalt']))',
> ";
htmlentities() und Verwandte brauchst du ausschlieÃlich zur Ausgabe an
den Browser. In Richtung Datenbank haben die nichts verloren.
MfG
Niels
--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · E-Commerce · Mambo Content Management |
`----------------------------------------------------------- -----´
Re: Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelle eintr.
am 12.07.2005 21:41:45 von xylux
>> "Niels Braczek" schrieb
> htmlentities() und Verwandte brauchst du ausschließlich zur Ausgabe an
> den Browser. In Richtung Datenbank haben die nichts verloren.
Hmm ! - und ich dachte gerade, ich hätte ein Teilproblem gelöst.
Beispiel:
Mit htmlentities maskiere ich alle möglichen Sonderzeichen und speichere das
dann in das Tabellenfeld.
Somit vermeide ich - meiner Meinung nach - Zeichensalat in den DB-Feldern.
Ich vermute, da hängt es.
Beim Auslesen in ein
Re: Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelle eintr.
am 12.07.2005 22:48:53 von Niels Braczek
H.Armgart schrieb:
>>> "Niels Braczek" schrieb
>
>> htmlentities() und Verwandte brauchst du ausschlieÃlich zur Ausgabe an
>> den Browser. In Richtung Datenbank haben die nichts verloren.
>
> Hmm ! - und ich dachte gerade, ich hätte ein Teilproblem gelöst.
Du holst die Information aus einer Website mit beliebigem $encoding.
Deine MySQL-Datenbank hast du auf UTF-8 eingestellt.
Mit iconv() wandelst du den Inhalt der Site von $encoding nach UTF-8.
Das Ergebnis schreibst du nach Maskierung mit mysql_real_escape_string()
in die Datenbank.
Zum Anzeigen liest du die Daten aus der Datenbank und gibst sie maskiert
mit htmlspecialchars() in der Textarea aus. Die Ausgabeseite deklarierst
du als UTF-8-encodet.
HTH
Niels
--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · E-Commerce · Mambo Content Management |
`----------------------------------------------------------- -----´
Re: Komme nicht weiter: Sonderzeichen aus Formular in MYSQL-Tabelle eintr.
am 16.07.2005 11:09:10 von xylux
>>>> "Niels Braczek" schrieb
> Du holst die Information aus einer Website mit beliebigem $encoding.
> Deine MySQL-Datenbank hast du auf UTF-8 eingestellt.
Ne, hatte ich nicht ! Habe das gerade erledigt und werde deine Tipps
umsetzen.
Mal sehen, ob ich es dann hinbekomme.
Vielen Dank für die Tipps und die Geduld.
Hans