2010-05-26 7 views
1

Juste entrer dans le développement web PHP. J'ai un formulaire HTML où un utilisateur vérifie certaines séries de cases à cocher générées dynamiquement, et soumet via POST. Du côté PHP, je veux vérifier lesquelles des cases ont été cliquées.Quelles sont les règles/fonctions PHP précises pour encoder les chaînes dans les tableaux POST?

J'ai un tableau full_list de $, et je suis en train de faire quelque chose comme

$selected_checkboxes = array_filter($full_list, function($item) { 
    array_key_exists($item, $_POST); 
    } 

Je rencontre des problèmes lorsqu'un élément de liste est nommé, par exemple « Beurre d'arachide », puisque dans le tableau POST, il est nommé " Beurre d'arachide".

Je pourrais certainement juste str_replace "" avec "_" avant de vérifier array_key_exists, mais j'imagine qu'il y a un problème de codage plus fondamental ici; plus précisément, je ne suis pas sûr de savoir exactement quelle couche transforme les chaînes normales dans les formulaires HTML (value = "Peanut Butter") en "Peanut_Butter".

Alors:

  • ce que la couche est responsable de cette conversion? Est-ce le navigateur?
  • Quelles sont les règles de conversion exactes, et existe-t-il une fonction PHP là-bas qui répliquera cette conversion exacte?

Répondre

-1

PHP ne le fait pas. Il y a quelque chose du coté client qui convertit les espaces en underscores.

Le navigateur doit encoder chaque variable en utilisant l'équivalent de urlencode(). PHP va automatiquement décoder ces chaînes de manière à ce qu'elles soient transparentes pour le programmeur. L'équivalent en javaScript est escape(). Mais il est très très probable qu'il y ait du code js qui convertit manuellement des espaces en underscores.

+0

Merci. Un urlencode suffirait-il à répliquer tout ce qui se passe sur le code client? – AlexeyMK

+0

Vous pouvez simplement utiliser firebug ou fiddler. créer un simpel

et ensuite mettre du texte. Regardez sur le panneau net dans firebug pour voir ce que le navigateur envoie. Si vous utilisez firefox, prenez le violoneur et faites la même chose. Je promets cependant, vous avez un peu de javascript réécrire vos chaînes. –

+0

Je suis sûr de le faire, et je vais regarder ça. Je suis plus intéressé, cependant, dans quelle fonction du côté du serveur PHP réplique tout ce que font les navigateurs. Aussi, est-ce que j'aborde ce problème de la mauvaise façon? Je ne peux pas être le premier à devoir vérifier laquelle d'une série de cases à cocher a été cliquée. – AlexeyMK

3

La réponse acceptée par Byron Whitlock est erronée. PHP est en effet le coupable ici. Voir le PHP manual:

Les points et les espaces dans les noms de variable sont convertis en traits de soulignement. Pour , l'exemple <input name="a.b" /> devient $_REQUEST["a_b"].

Voir aussi les réponses de this similar question.

Questions connexes