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
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.