web-dev-qa-db-fra.com

URLEncode de l'URL complète

J'utilise la fonction PHP urlencode () pour échapper les caractères des balises d'ancrage (). Pourquoi ne puis-je pas utiliser la fonction sur une URL complète telle que

http://www.allposters.com/gallery.asp?startat=/getthumb.asp&txtSearch= ...

La fonction convertit cette chaîne en

http%3A%2F%2Fwww.allposters.com%2Fgallery.asp%3Fstartat%3D%2Fgetthumb.asp%26txtSearch

qui ne marche pas en cliquant sur ...

Essayer d'échapper à la QUERY seulement

startat%3D%2Fgetthumb.asp%26txtSearch

brise également le lien.

Ma question est donc de savoir quels caractères dois-je utiliser pour utiliser la fonction urlencode ()?

Merci,

Joël

5
Joel

URLEncode est conçu pour encoder des caractères ayant une signification spéciale dans les URL (comme les deux points, les points d'interrogation, les barres obliques, etc.).

Vous ne devez appliquer URLEncode qu'aux valeurs que vous souhaitez encoder dans votre URL, pas à l'URL complète.

Par exemple. Supposons que j'ai l'URL suivante:

http://example.com/search.php?query=VALUE

Dans l'état actuel des choses, aucune fuite n'est nécessaire. Mais supposons que VALUE soit réellement

/. the book

Le bit VALUE contient maintenant un caractère qui n'est pas sûr, car une barre oblique a une signification particulière dans une URL.

Donc, avant d’attacher la valeur à l’URL, j’ai besoin d’URLEncode niquement la valeur.

http://example.com/search.php?query=%2F.%20the%20book

Lorsqu'un serveur Web obtient la requête ci-dessus, il lui faut URLDecoder le paramètre de requête pour que le texte d'origine soit récupéré.

Dans l'exemple cité dans la question, l'intégralité de la chaîne de requête était en cours de codage. Cela est incorrect car les caractères spéciaux (tels que les esperluettes entre les paramètres de requête) sont alors échappés et ne sont pas interprétés correctement. Vous ne devez encoder que les valeurs des paramètres.

9
Kris