2010-12-04 45 views
1

Lors de l'encodage nouvelle ligne de zone de texte avant de les stocker dans mysql en utilisant PHP avec rawurlencode fonction code de saut de ligne comme %0D%0A.de codage/décodage de valeur de zone de texte en utilisant rawurlencode/rawurldecode

Exemple: texte textarea est entré par l'utilisateur:

a 
b 

encodage en utilisant rawurlencode et stocker dans la base de données sera la valeur stocker a%0D%0Ab

Lors de la récupération de la base de données et le décodage en utilisant rawurldecode ne fonctionne pas et le code donne une erreur. Comment surmonter cette situation et quelle est la meilleure façon de stocker et récupérer et afficher les valeurs de textarea.

+0

Y a-t-il une raison d'utiliser rawlurlencode pour d'énormes données comme textarea? ne devrait-il pas utiliser la méthode POST? – ajreal

+0

J'utilise rawurlencode pour encoder tous les symboles avant de stocker dans la base de données, pas pour POST – zHs

Répondre

1

pouvez-vous d'abord encoder cette chaîne textarea en utilisant base64_encode et ensuite effectuer un base64_decode sur le même, si ce qui précède ne fonctionne pas pour vous.

Si la zone de texte ne contient pas d'URL, vous devez plutôt utiliser base64_encode puis rawurlencode, puis stocker comme d'habitude.

+0

base64_encode fonctionne bien jusqu'à présent, mais base64_decode ('YQ0KYg ==') retourné "un b" au lieu d'afficher a et b dans deux lignes. ('YQ0KYg ==' est la valeur encodée de la zone de texte ayant a et b en deux lignes) – zHs

+1

hey ZHS, j'ai essayé de le parcourir moi-même, car j'étais sûr de ce que je disais. 'YQ0KYg ==' est la valeur codée pour la chaîne requise (a et b dans deux lignes séparées). Cependant, si vous rencontrez des problèmes en l'affichant sur deux lignes, utilisez-le sur la valeur décodée, par ex. 'str_replace (PHP_EOL, '\ n', base64_decode ('YQ0KYg =='));', ce qui donnera 'a \ nb' où' \ n' est notre caractère de nouvelle ligne. Vous pouvez toujours vider les variables en utilisant la fonction 'var_dump'. – Stoic

+1

De même, s'il s'agit d'une zone de texte de saisie utilisateur, assurez-vous d'échapper les données avant de les stocker dans la base de données, par ex. pour mysql, vous pouvez utiliser: 'mysql_real_escape_string()' – Stoic

0

Tout d'abord, il est très rare d'exécuter textarea via urlencode() urlencode n'a pas été conçu à cet effet. Deuxièmement, si vous voulez toujours faire cela, alors peut-être que le problème vient de la base de données. Vous devez d'abord nous indiquer quelle base de données vous utilisez et quel TYPE vous utilisez pour stocker ces données: les stockez-vous en tant que TEXT ou en tant que données BINARY? Avez-vous configuré le jeu de caractères correct dans la base de données?

1

Vous ne devez simplement pas utiliser rawurlencode pour les données d'échappement pour votre base de données.

Chaque format cible possède sa propre méthode d'échappement qui, en termes généraux, assure le stockage/l'affichage/le transfert en toute sécurité d'un endroit à un autre, et n'a pas besoin de décoder à l'autre extrémité.

Par exemple:

  • l'affichage du texte en HTML, utilisez htmlentities ou htmlspecialchars
  • stockage dans la base de données, l'utilisation mysqli_real_escape_string, pg_escape_string, etc ...
  • transfert variablename, l'utilisation urlencode
  • transfert variablecontent, utiliser rawurlencode
  • etc ...

Vous remarquerez que le décodage de ces éléments est souvent effectué par le navigateur/la base de données. Donc, aucune donnée n'est réellement stockée échappée. Et le décodage n'a pas besoin d'être fait par votre code.

Le problème est probablement dû au fait que vous échappez à une séquence avec rawurlencode, mais que votre base de données attendait le format d'échappement pour la marque de base de données spécifique. Et de-échappé en utilisant cette hypothèse, ce qui était faux, qui a foiré votre chaîne. Conclusion: découvrez quelle base de données de marque vous utilisez, recherchez la fonction d'échappement spécifique pour cette base de données, et utilisez la fonction d'échappement appropriée sur tous vos votre contenu "transfert".


P.S .: une définition ne peut pas être correcte, s'il vous plaît pensez. Je voulais que l'idée reste mais je n'utilise probablement pas tous les bons termes.