http_build_query() sans le codage d'url
Est-il un moyen d'utiliser http_build_query()
sans avoir à les encoder, selon certaines standard RFC?
Pourquoi je ne veux pas encoder de tout: je suis en interrogeant le Ebay API.. Ils honnêtement insister sur les noms des paramètres n'étant pas codées dans l'URL, dans la mesure des virgules entre parenthèses. E. g. DomainName(0) est un paramètre, et la requête échoue si ces parens sont codées.
- De quoi êtes-vous vraiment essayer de l'accomplir?
- mis à jour avec explication
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
urldecode()
de la fonction sur une chaîne de résultats que vous pouvez obtenir à partir dehttp_build_query()
http_build_query_decoded()
. Vous devez copier les paramètres, cependant, puisque vous devez passer àhttp_build_query
.Nope, il semble toujours à encoder (ce qu'il doit, il est destiné à encoder, lors de la construction d'une liste de paramètres d'une URL).
Vous pourriez faire votre propre...
CodePad.
PHP 5.3.1 (Buggy Comportement)
http_build_query NE pour échapper à la "& " esperluette qui rejoint les paramètres. Exemple:
user_id=1&setting_id=2
.PHP 5.4+
http_build_query NE PAS pour échapper à la "& " esperluette qui rejoint les paramètres. Exemple:
user_id=1&setting_id=2
Exemple:
Solution lorsque ciblant plusieurs version
Option #1: Écrire une fonction wrapper:
Option #2: Fossé de la http_build_query fonction et écrire votre propre.
Vous voudrez peut-être essayer de leur API JSON au lieu. J'ai essayé d'obtenir un échantillon de travail, mais je n'ai pas de nom de l'application, donc je ne peux pas vérifier le résultat. Voici le code:
Vous aurez besoin de remplir
$appName
avec quel que soit le nom de l'application est. Aussi laX-EBAY-SOA-OPERATION-NAME
devra être réglé à l'appel, et le JSON modifié si l'appel est différent.http_build_query() est INVALIDE, sans encodage. Peut-être que vous avez accidentellement double-encoder?
Par exemple, essayez de construire la requête http pour ce tableau:
Sans codage, vous obtiendrez
Quand codé correctement, vous obtiendrez
ce qui est correct. Si vous ignorez l'encodage, être sûr d'éviter les URL des attaques par injection.
Vous pouvez utiliser urldecode().
Ou utiliser http_build_query avec le $arg_separator argument.
la sortie de la ci-dessus est
numeric_prefix: si le tableau des index sont en chiffres, cette chaîne est ajoutée en tant que préfixe dans chaque index. Dans le cas présent, l'test_0=bar".
arg_separator : est utilisé pour séparer les arguments. Si non est donné php utiliser le arg_separator.sortie difined en php.ini
Voir php http_build_query
mon prendre sur alex réponse, mais est plus rapide
trim()
également de spécifier des caractères à être coupé. E. g. Je voudrais utilisertrim($query, '&')
au lieu desubstr($query, 0, -1)
.Cela pourrait aussi faire
J'ai essayé de le faire récemment https://gist.github.com/marcocesarato/4293986fe93139f04d8269aa3fbd47e9 la différence est que cette fonction est la matrice de récursive et compatible avec PHP4. Vous pouvez gérer ici les urlencode
J'ai essayé de créer une chaîne pour l'attacher à la fin d'une url comme celle-ci,
qui imprime
Mais mon api n'aime pas les chiffres entre crochets, j'ai donc trouvé une expression régulière qui supprime les chiffres -
La version finale du code, et le résultat -
Imprime -
include[]=enrollments&include[]=current_grading_period_scores&enrollment_type[]=student
Si quelqu'un sait de mieux regex laissez-moi savoir, je suis un peu un noob avec elle.