You are not logged in.

wcf.regNote.message

bauser

Intermediate

  • "bauser" started this thread

Posts: 384

Occupation: Senior Software Engineer

  • Send private message

1

Thursday, October 23rd 2008, 11:20am

problem mit htmlentities() und quotes

hallo!

ich habe das problem, dass ich versuche einen durch den benutzer eingegebenen text in eine mysql datenbank zu speichern. um den string zu bearbeiten benutze ich folgende codezeile

PHP Source code

1
mysql_escape_string(nl2br(htmlentities(utf8_decode(strip_tags($sMessage)), ENT_QUOTES)));


problem ist, dass anführungszeichen, sowohl einfache als auch doppelte, trotzdem nicht durch die entsprechende entität ersetzt werden, sondern weiterhin escaped werden. außerdem wird zum beispiel das €-Zeichen als Fragezeichen dargestellt.

jemand eine idee, was ich falsch mache?

danke

EDIT:

PHP Source code

1
nl2br(str_replace("€""€"str_replace("\""""",htmlentities(utf8_decode(strip_tags($sMessage))))));


ist unschön und funktioniert für das eurozeichen nicht, da es von htmlentities durch ein ? ersetzt wird. setzt ich den str_replace vor den htmlentities, wir das & vom € "entitiert". ich lass es jetzt erstmal so und kann halt leider keine €-zeichen darstellen. würde mich aber freuen, falls einer eine lösung weiß.
I'm Tony Menthanar! You fuck wit me, you fuckin' wit da best!

This post has been edited 3 times, last edit by "bauser" (Oct 23rd 2008, 12:24pm)


Prometheus

Administrator

Posts: 3,278

  • Send private message

2

Tuesday, March 3rd 2009, 5:19pm

Ich überlege grade was genau das bewirken soll. Soll das dazu dienen das der User egal was er auch versuchen mag keine Möglichkeit bekommt SQL Injections zu nutzen oder sonst einen Unfug zu machen?

Wie dem auch sei. Ich zerlege mal die einzelnen Vorgänge die du anwenden möchtest und vielleicht wird dadurch klar warum das nicht klappt.

PHP Source code

1
$tmpstring strip_tags($sMessage);

Dadurch werden alle Tags aus dem String von HTML und PHP entfernt. Denke das ist gewollt so.

PHP Source code

1
$tmpstring utf8_decode($tmpstring);

Damit soll der String in UTF-8 konvertiert werden. Das Euro Symbol ist jedoch nicht Bestandteil von ISO-8859-1 was dazu führt das das Euro Symbol als ? dargestellt wird. Damit das funktioniert verwende mal folgendes. (Quelle: www.php.net)

PHP Source code

1
$tmpstring iconv("UTF-8""CP1252"$tmpstring);

PHP Source code

1
$tmpstring htmlentities($tmpstring,ENT_QUOTES,UTF-8);

Hier gibst Du den Parameter ENT_QUOTES mit. Das bewirkt, dass einfache und doppelte Anführungszeichen konvertiert werden. Vielleicht möchtest Du genau das Gegenteil dann muss da ENT_NOQUOTES hin.

PHP Source code

1
$tmpstring nl2br($tmpstring);

Da gibt es nichts zu zu sagen denke ich. Kann einfach so stehen bleiben.

PHP Source code

1
$tmpstring mysql_escape_string($tmpstring);

Ist eigentlich auch klar. Schau mal da -> http://de3.php.net/manual/de/function.my…cape-string.php
Seit PHP 4.3.0 sollte man lieber mysql_real_excape_string verwenden.

Zusammen gebaut sieht das ganze dann wie folgt aus.

PHP Source code

1
$tmpstring mysql_real_escape_string(nl2br(htmlentities(utf8_decode(strip_tags($sMessage)),ENT_QUOTES,UTF-8)));

Habs nicht getestet aber sollte nach meinem Verständnis funktionieren.

Hoffe meine Antwort kommt nicht all zu spät ;)
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

bauser

Intermediate

  • "bauser" started this thread

Posts: 384

Occupation: Senior Software Engineer

  • Send private message

3

Monday, March 30th 2009, 1:05pm

spät schon aber immer gerne gesehen ;) wusste gar nicht dass utf-8 das € nicht kennt, darum konnte ich mir den fehler slebst nicht erklären. danke für den hinweis. die lösung werde ich ausprobieren, vermutlich aber ähnlich spät da projekt pausiert hehe.
I'm Tony Menthanar! You fuck wit me, you fuckin' wit da best!

wcf.user.socialbookmarks.titel