2010-12-10 7 views
1

Ich habe ein Problem beim Einfügen in mysql.Erhalten von doppelten und einfachen Anführungszeichen und Escapezeichen beim Einfügen in mysql

Ich habe ein mehrdimensionales Array in Javascript, das im JSON-Format in eine Zeichenfolge konvertiert wird. Der String sieht wie folgt zum Beispiel:

[["text1","text2","te'xt with apostroph'e"],["subarray2","a \u000a unicode number","change line \n \n"]]

Also die Sache ist, dass dieses Format doppelte Anführungszeichen außerhalb der Felder verwendet, und dann im Inneren manchmal habe ich einfache Anführungszeichen und Escape-Zeichen \ wie Sie sehen können.

Wenn ich dies von Javascript zu PHP durch AJAX und entschlüsseln es in PHP, alles funktioniert gut, keine Probleme, perfekt.

Das Problem kommt, wenn ich es in mysql einfügen muss.

  1. magic_quotes ist überall in der php.ini
  2. off ich mysql_real_escape_string Funktion verwenden, bevor ich

in mysql einfügen Aber was auch immer ich tue, ist der Einsatz erfolgreich, aber in der Datenbank die doppelten Anführungszeichen in einfache Anführungszeichen umgewandelt werden, und auch die \ Escape-Zeichen verschwinden.

So innen Datenbank ich mit dieser bin übrig geblieben:

[['text1','text2','te'xt with apostroph'e'],['subarray2','a u000a unicode number','change line n n']]

Dies ist ein Problem natürlich, als ich die doppelten Anführungszeichen erhalten muß, so dass, wenn ich die später von PHP zu lesen, ich entschlüsseln kann JSON und behalten Sie immer noch die einfachen Anführungszeichen im Text. Auch die \n neue Zeile und die \u000a Unicode-Zeichen funktionieren nicht mehr, weil die Escape-Zeichen verschwunden sind.

Ich fand den Trick zu verwenden htmlspecialchars($thephrase, ENT_QUOTES); , die doppelte Anführungszeichen in &quot konvertiert. Dies bewahrt zumindest meine doppelten Anführungszeichen und einfachen Anführungszeichen getrennt, aber dies ist offensichtlich nicht die ideale Lösung, und ich verliere immer noch die Escape-Zeichen \.

Etwas ist offensichtlich falsch in dem, was ich tue oder die Konfiguration, das Problem ist nicht mit dem JSON verwandt, wenn ich einfach direkt in Mysql Doppel-und einfache Anführungszeichen zusammen, die doppelte in eins konvertiert werden.

Also sowieso die Frage, die ich denke, ist in einem Text, wo ich doppelte Anführungszeichen, einfache Anführungszeichen, Escape-Zeichen und neue Zeile Zeichen habe, wie kann ich sicherstellen, dass, wenn ich alles in mysql einfügen, ich alle beibehalten die im mysql varchar- oder text-Feld; doppelte Anführungszeichen, einfache Anführungszeichen, \ Escape-Zeichen und neue Zeilenzeichen?

ich sicher gemacht haben, dass magic_quotes off in php.ini überall

Vielen Dank für jede Beratung oder Hilfe.

+0

Versuchen Sie stattdessen mit PDO (http://www.php.net/pdo); so viel einfacher und zuverlässiger mit der alten mysql-bibliothek und machen sie die ganze arbeit selbst mit mysql_real_escape_string ... –

+0

sehr interessant, danke für ihren rat, ich werde forschen und versuchen, PDO in nächsten projekten, aber für dieses projekt kann ich nicht Ändern Sie den ganzen Code, es sollte eine Möglichkeit geben, es hoffentlich zu beheben, ohne die PDO, Ding ist, doppelte Anführungszeichen erhalten und Escape-Zeichen beim Einfügen in mysql sollte leicht zu bewerkstelligen :) etwas im tun falsch falsch:) danke wieder:) –

Antwort

1

Jetzt sollten Sie Ihr Problem gelöst haben. Für zukünftige Referenz, ich denke, was Sie suchten, war php's addslashes() oder die spezifischen mysqli_real_escape_string(). Diese Funktionen werden die Zeichen umgehen, die in Datenbankabfragen zitiert werden müssen.

Nebenbei, ich würde Ihnen empfehlen, Ihre Fragen so knapp wie möglich zu schreiben. Menschen neigen dazu, riesige Testamente zu überspringen.

+0

ja addslashes() Arbeit für mich –