2010-12-10 48 views
1

J'ai un problème lors de l'insertion dans mysql.Préserver les guillemets simples et doubles et les caractères d'échappement lors de l'insertion dans mysql

J'ai un tableau multidimensionnel en javascript qui est converti en une chaîne au format JSON. La chaîne ressemble à ceci par exemple:

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

Donc, la chose est que ce format utilise des guillemets doubles en dehors des champs, puis à l'intérieur parfois je guillemets simples, et échapper les caractères \ comme vous pouvez le voir.

Si je l'envoie de javascript à php par ajax et le décode en php, tout fonctionne très bien, pas de problèmes, parfait.

Le problème vient quand j'ai besoin de l'insérer dans mysql.

  1. magic_quotes est hors partout dans le php.ini
  2. j'utiliser la fonction mysql_real_escape_string avant insérer dans une base MySQL

Mais quoi que je fasse, l'insert est réussie, mais dans la base de données les guillemets doubles être converti en guillemets simples, et les caractères d'échappement \ disparaissent.

Donc, la base de données à l'intérieur, je suis parti avec ceci:

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

Ce problème est bien sûr que je dois préserver les guillemets doubles de sorte que lorsque je lis ceci de php plus tard, je peux décoder le JSON et toujours garder les guillemets simples dans le texte. En outre, la nouvelle ligne \n et les caractères unicode \u000a ne fonctionnent plus car les caractères d'échappement ont disparu.

J'ai trouvé l'astuce pour utiliser htmlspecialchars($thephrase, ENT_QUOTES); qui convertit les guillemets doubles en &quot. Cela préserve au moins mes guillemets doubles et guillemets simples séparés, mais ce n'est évidemment pas la solution idéale, plus je perds encore les caractères d'échappement \.

Quelque chose est évidemment faux dans ce que je fais ou la configuration, le problème n'est pas lié au JSON, si j'insère simplement directement dans mysql double et guillemets simples, les doubles sont convertis en single. Donc de toute façon la question que je suppose est, dans un texte où j'ai des guillemets, des guillemets simples, des caractères d'échappement et des caractères de nouvelle ligne, comment puis-je m'assurer que, quand j'insère tout cela dans mysql, je conserve tout ceux du mysql varchar ou du champ de texte; guillemets doubles, guillemets simples, \ caractères d'échappement et caractères de nouvelle ligne?

Je me suis assuré que magic_quotes est hors partout dans le php.ini

Merci beaucoup pour tout conseil ou de l'aide.

+0

Essayez d'utiliser PDO (http://www.php.net/pdo) à la place; beaucoup plus facile et plus fiable en utilisant l'ancienne bibliothèque mysql et faire tout le travail vous-même avec mysql_real_escape_string ... –

+0

très intéressant, merci pour vos conseils, je vais chercher et essayer d'utiliser PDO dans les prochains projets, mais pour ce projet je ne peux pas changer le code entier, il devrait y avoir un moyen de le réparer sans le pdo, la chose est, en préservant les guillemets et les caractères d'échappement lors de l'insertion dans mysql devrait être facile à accomplir :) quelque chose im mal faire à coup sûr: –

Répondre

1

Vous devriez avoir résolu le problème. Pour référence future, je pense que ce que vous cherchiez était php addslashes() ou le plus spécifique mysqli_real_escape_string(). Ces fonctions vont échapper aux caractères qui doivent être cités dans les requêtes de base de données.Sur une note de côté, je vous recommande de rédiger vos questions aussi succinctement que possible. Les gens ont tendance à ignorer d'énormes testaments.

+0

oui addslashes() travail pour moi –