2010-09-17 24 views
5

Chaque paramètre d'une URL peut avoir plusieurs valeurs. Comment puis-je les séparer? Voici un exemple:La séparation des valeurs dans une URL, et non avec un &

http://www.example.com/search?queries=cars,phones 

Je veux chercher 2 choses différentes: les voitures et les téléphones (ce qui est juste un exemple artificiel). Le problème est le séparateur, une virgule. Un utilisateur peut entrer une virgule dans le formulaire de recherche dans le cadre de sa requête, puis cela serait foiré. Je pourrais avoir 2 paramètres d'URL distincts:

http://www.example.com/login?name1=harry&name2=bob 

Il n'y a pas de problème réel là, en fait, je pense que c'est la façon dont les URL ont été conçues pour gérer cette situation. Mais je ne peux pas l'utiliser dans ma situation particulière. Nécessite un long post séparé pour dire pourquoi ... Je dois simplement séparer les valeurs.

Ma question est la suivante: existe-t-il un caractère ou une valeur encodable en URL que vous ne pouvez pas entrer dans un formulaire (textarea ou input) que je peux utiliser comme séparateur? Comme un personnage nul? Ou un caractère non visible?

MISE À JOUR: merci à tous pour vos réponses très rapides. J'aurais dû énumérer le même exemple de nom de paramètre, mais l'ordre compte dans mon cas, donc ce n'était pas une option non plus. Nous avons résolu ceci en utilisant un caractère codé en URL% 00 (UTF-8 \ u0000) comme séparateur de valeur.

+0

Comment les valeurs sont-elles entrées par l'utilisateur en premier lieu? Un certain nombre de champs de texte? – Andrew

+0

Pourquoi ne pas simplement encoder la valeur de vos paramètres? S'ils entrent dans% 20, le% sera codé, donc cela ne posera pas de problème, ou est-ce que je manque quelque chose? – Gazillion

+0

valeurs sont en cours d'entrée par les éléments de formulaire html standard. Le problème avec% 20 n'est pas qu'ils entreraient% 20, c'est qu'ils entreraient ce que% 20 représente (un espace je pense). –

Répondre

12

L'approche standard consiste à utiliser deux fois le même nom de clé.

http://www.example.com/search?queries=cars&queries=phones 

La plupart des bibliothèques de formulaires vous permettent d'y accéder automatiquement en tant que tableau. (Si vous utilisez PHP (et en utilisant $_POST/GET et ne pas réinventer la roue) vous devrez changer le nom en queries[].)

+0

J'ai mentionné dans ma mise à jour que vous aviez raison, c'était aussi une option, mais dans mon cas, j'ai vraiment besoin de séparer les valeurs dans une valeur de paramètre. L'ordre des choses et les paramètres du même nom auront des valeurs séparées (parfois avec un ordre différent) –

1

Venez avec votre propre séparateur qui est peu susceptible d'être entré dans une requête. Deux underscores '__' par exemple.

+0

C'est essentiellement ce que je demandais, mais je voulais quelque chose qui serait impossible à entrer dans un élément de formulaire html standard. –

0

la chose la plus facile à faire serait d'utiliser un séparateur personnalisé comme [!! ValSep !!].

1

Vous pouvez leur attribuer le même nom de paramètre.

http://www.example.com/search?query=cars&query=phones

L'API HTTP côté serveur moyenne est en mesure de les obtenir comme un tableau . Selon l'historique de vos questions, vous utilisez JSP/Servlet, vous pouvez donc utiliser HttpServletRequest#getParameterValues() pour cela.

String[] queries = request.getParameterValues("query"); 
+0

Oui, cela ne fonctionne pas pour moi non plus parce que l'ordre compte, j'ai expliqué dans une autre réponse un peu plus en détail. Je suis content de te voir te souvenir de mes autres questions! Je vous remercie pour votre aide! J'ai trouvé une bonne solution, je pense, à cette question (mise à jour de la question). –

1

Pourquoi ne pas simplement faire quelque chose comme "||"? Toute personne qui tape dans une zone de recherche s'est probablement endormie sur son clavier:} Ensuite, explosez-la sur le backend.

+0

peut-être que vous avez raison :). Mais c'est pour un mécanisme de widget standard qui sera utilisé dans mille situations différentes. –

+0

Ahhh, ok ça change les choses. Désolé pour ça. – malonso

2

Juste encoder l'URL de l'entrée de l'utilisateur de sorte que leurs virgules deviennent % 2C.