2010-07-03 7 views
4

J'ai un champ textarea qui est inséré dans une base de données mysql qui peut contenir des sauts de ligne. Les données textarea ont accidentellement traversé deux lots de fonctions mysql_real_escape_string. Par conséquent le bit de saut de ligne des données de champ est maintenant stocké en tant que "\ r \ n" au lieu d'une nouvelle ligne réelle, car il a été double échappé?Double insertion mysql_real_escape_string de caractères de nouvelle ligne. Comment obtenir une nouvelle ligne de retour?

Maintenant réécrit dans le champ textarea html pour être édité, "\ r \ n" est affiché à la place d'une nouvelle ligne. Question: Comment est-ce que je rectifie la situation pour que ceux-ci deviennent réellement de nouvelles lignes?

+0

Pourquoi le contenu passent par * deux * opérations d'évacuation en premier lieu? –

+0

@Pekka, il a dit que c'était un accident. –

+0

Pour éviter ce type de problème à l'avenir, je recommande fortement d'utiliser des instructions préparées afin que vous n'ayez pas besoin d'utiliser 'mysql_real_escape_string()' ou 'addslashes()'. Assurez-vous également que 'magic_quotes_gpc' est désactivé dans votre configuration PHP. –

Répondre

4

Vous échapperez probablement à l'utilisation de la chaîne mysql_real_escape deux fois - en tant que filtre d'entrée (faux!) Et en tant que préparation de données SQL. Vous devez vous débarrasser du premier.

Ou une fois, en tant que filtre d'entrée, puis d'utiliser des instructions préparées pour la requête. Débarrassez-vous du premier aussi.

2

Vous devez absolument régler la situation qui conduit à la double échappement.

Une solution rapide pour le contenu déjà traité de cette façon est

str_replace("\\r\\n", "\r\n"); 
-1

Pour récupérer votre original, vous devez faire l'inverse. Créez un script qui sélectionne vos lignes existantes dans la table et, sans échapper à l'entrée, mettez à jour la valeur de la colonne. Ceci, en substance, va stocker dans l'entrée unique (correctement) échappée.

-1

Essayez Ce code

$tval = str_replace("\\r\\n", "\r\n",mysql_real_escape_string(trim($tval))); 
+0

Pourquoi cette réponse a-t-elle été votée? –

Questions connexes