2009-03-31 6 views
1

J'ai un formulaire HTML POSTing sur une page PHP.Formulaire PHP d'échappement automatique des données publiées?

Je peux lire dans les données à l'aide de la variable $ _POST sur le PHP.

Cependant, toutes les données semblent être échappées.

Ainsi, par exemple

une virgule (,) =% 2C deux points (:) =% 3a une barre oblique (/) =% 2

donc des choses comme une simple URL de cette comme http://example.com obtenir POSTed comme http% 3A% 2F% 2Fexample.com

Des idées sur ce qui se passe?

Répondre

0

Voici un simple boucle PHP pour décoder tous POST vars

foreach($_POST as $key=>$value) { 
    $_POST[$key] = urldecode($value); 
} 

Vous pouvez alors y accéder comme d'habitude, mais correctement décodés. Cependant, j'utiliserais un tableau différent pour les stocker, car je n'aime pas polluer les super globals (je crois qu'ils devraient toujours avoir les données exactes comme PHP).

3

En fait, vous voulez urldecode. % xx est un encodage d'URL, pas un encodage html. La vraie question est pourquoi obtenez-vous ces codes. PHP décode généralement l'URL pour vous pendant qu'il analyse la requête dans les variables $ _GET et $ _REQUEST. Les formulaires POSTed ne doivent pas être encodés. Pouvez-vous nous montrer une partie du code qui génère le formulaire? Peut-être que votre formulaire est encodé à la sortie pour une raison quelconque.

Voir l'avertissement sur cette page: http://us2.php.net/manual/en/function.urldecode.php

+0

C'est ce que je pensais, je l'ai seulement vu dans la barre d'adresse. – alex

+0

Peut-être qu'il fait écho à une variable GET dans un champ caché et il est affiché à nouveau avec les encodages? – alex

0

Cela ne devrait pas se produire, et si vous pouvez le corriger manuellement par urldecode() ING, vous serez probablement cacher un bug de base ailleurs qui pourrait se rallier à vous mordre plus tard. Bien que lorsque vous POSTEZ un formulaire en utilisant le type de contenu par défaut 'application/x-www-form-encoded', les valeurs qu'il contient sont codées en URL (% xx), PHP annule cela pour vous quand il crée des valeurs disponible dans le tableau $ _POST [].

Si vous obtenez toujours des séquences non désirées% xx après, il doit y avoir une autre couche de manuel URL codage en cours qui ne devrait pas être là. Vous devez trouver où c'est. Si c'est un champ caché, peut-être que la page qui le génère est l'encodage accidentel en utilisant urlencode() au lieu de htmlspecialchars(), ou quelque chose? Mettre un exemple de code en ligne pourrait nous aider à le découvrir.

Questions connexes