Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP-Parser hat Probleme mit Apostrophen
Moin,
habe mir für das Spiel EVE ein MYSQL/PHP-basiertes Killboard geholt (killboard.co.uk) und habe ein Problem damit.
Alles läuft zwar so wie es sollte, will man jedoch eine killmail parsen (killmails bestehen einfach nur aus Text), die Apostrophe enthät, wird der Output zu einem Haufen Blödsinn, warum ist dies so?
Kann mir jemand helfen? Hier der Source vom Parser:
http://nopaste.php-q.net/232858
darph
2006-08-16, 13:13:45
$sql = "SELECT * FROM `Ship` WHERE (`ShipID` = '$victimShipID')";
Stellen wir uns jetzt vor, daß das Schiff "Peter's Schiff" heißt.
Dann steht da $sql = "SELECT * FROM `Ship` WHERE (`ShipID` = 'Peter's Schiff')";
// ^ ^ ^
// Problem
Kein Wunder, daß das bricht. ;(
schau mal in der PHP Doku nach mysql_real_escape_string(). Abgesehen davon ist das nicht der vollständige Code.
Hmm, komischerweise funktioniert es aber komplett reibungslos, wenn nur im zu parsenden Text keine Apostrophe sind...
Marscel
2006-08-16, 13:42:58
Hmm, komischerweise funktioniert es aber komplett reibungslos, wenn nur im zu parsenden Text keine Apostrophe sind...
Warum, das hat darph doch eben erklärt.
Die Apostophe unterbrechen die Query, was keine schöne Folgen hat.
Den Source Code find ich alles andere als Hübsch geschrieben, aber eine mögliche, ebenso gefrickelte, Lösung wäre, dass du bei JEDER SQL-Anfrage um die PHP-Variable die genannte escape-Methode legst.
z.B in Zeile 107:
$sql = "SELECT * FROM `Ship` WHERE (`ShipID` = '".mysql_real_escape_string($victimShipID)."')";
Achso, sorry, ich selber bin PHP-DAU.
Der Parser ist nicht mein Code, sondern ein vorgefertigter (Open Source), seltsamerweise scheint er beim Beispiel-Board (killboard.co.uk) zu funktionieren, nur bei mir nicht.
Könntet ihr mir sagen, wie genau ich darph's mysql_real_escape_string() einbauen muss?
Ich meine so einbauen, dass ich es nicht in jede Zeile schreiben muss. ;)
(del)
2006-08-16, 14:04:41
ich weiß nicht, wie der rest vom code aussieht, aber wie wäre es, wenn du mit htmlentities() (Wandelt alle Sonderzeichen in entsprechende HTML-Codes um) etwas anfängst?
ich weiß nicht, wie der rest vom code aussieht, aber wie wäre es, wenn du mit htmlentities() (Wandelt alle Sonderzeichen in entsprechende HTML-Codes um) etwas anfängst?
Wie gesagt, ich selber kann leider nicht wirklich PHP schreiben und weiss gar nicht, wie ich das einbauen müsste. :(
/dev/NULL
2006-08-16, 14:40:45
Was erwartest Du dann? Das jemand seine wertvolle Zeit opfert und dir das einbaut?
Frag die Leute von Killboard, beschäftige/bezahle nen PHP Guru oder arbeite dich rein. Irgendwann muß man lernen das man nicht alles kostenlos von hinten reingeschoben bekommt. Wenn es nicht taugt nimm was anderes oder änder es.
Tut mir leid, ich wusste nicht, dass das so ein Aufwand, hätte ja sein können, dass es nur 2 Zeilen sind, dann probiere ich es mal mit Marselcs Vorschlag, danke trotzdem.
/dev/NULL
2006-08-16, 14:47:43
Es ist nicht so ein Aufwand, aber wenn es jetzt einer macht und es geht nicht hängt er da und debuggt dir 3 Stunden das Zeug.. ob er das gerne macht weiß ich nicht, ich würde es nicht einfach so machen, ahbe aber auch grad keine soziale Ader.
Versuch das Zeug was man Dir gesagt hat, schwer sollte es nicht sein, ansonsten frag den Author von Killboard, der kann dir am ehesten helfen (wenn er Lust hat)
So, mit
$killArray = $_POST['textarea'];
if (get_magic_quotes_gpc() == 0) $killArray = addSlashes($killArray);
$killArray = explode("\r\n", addSlashes($_POST['textarea']));
funktioniert es. Sehr seltsam, wahrscheinlich habe ich jetzt einen total zerrupften Code, aber hauptsache es geht. :D
Danke an alle.
Hinweis: ' ist ein Anführungszeichen. ’ ist ein Apostroph!
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.