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.
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
J'utilise rawurlencode pour encoder tous les symboles avant de stocker dans la base de données, pas pour POST – zHs