2010-03-12 5 views
5

J'ai un site Web qui utilise le facebook, twitter, de délicieux liens de partage. Ils contiennent une URL codée en url du site que vous souhaitez partager. Le problème est que je veux ensuite envoyer l'URL facebook/twitter/delicious via une page de redirection php.Est-il possible d'urlencode une URL qui contient une url codée URL?

Est-ce que cela fonctionnera pour encoder une URL dans une URL codée? Y aura-t-il des effets secondaires?

Pour simplifier ma question:

www.website.com/redirect.php?url=" URLENCODED (http://www.facbook.com/sharer.php?t='URLENCODED(title)'&u='URLENCODED(http://www.hotel.com)') 
+0

Pour comprendre la récursivité, il faut d'abord comprendre la récursivité. –

Répondre

9

Vous pouvez encoder une chaîne à plusieurs reprises avec le pour cent de codage et d'obtenir la valeur d'origine par ce décodage de la même quantité de temps:

$str = implode(range("\x00", "\xFF")); 
var_dump($str === urldecode(urldecode(urldecode(urlencode(urlencode(urlencode($str))))))); 

Ici, le La valeur de $str est codée trois fois, puis décodée trois fois. La sortie de ce codage et décodage répétés est identique à la valeur de $str.

Donc, essayez ceci:

'http://example.com/redirect.php?url='.urlencode('http://www.facbook.com/sharer.php?t='.urlencode('title').'&u='.urlencode('http://www.hotel.com')) 
+0

Je comprends comment le faire ... J'étais juste inquiet que urlencoding urlencoded url pourrait le faire être décodé toute l'URL à la page de redirection ... Je suis donc supposer que l'encodage url imbriqué fonctionnera bien? – Mark

+0

Comme l'a dit @Gumbo: "Vous pouvez encoder une URL plusieurs fois et obtenir la valeur d'origine lors du décodage le même nombre de fois". Chaque fois que vous codez, toutes les parties encodées d'avant sont encodées * à nouveau * – Josh

+1

@Mark: Donc au cas où vous seriez encore confus, non, l'URL de redirection ne décodera pas l'URL entière, elle supprimera juste un "niveau" de codage. Votre plan est sain, en d'autres termes. – Josh

1

Il est bon d'ajouter une deuxième couche de urlencodage. L'idée de URLEncoding est d'empêcher le serveur d'interpréter les caractères spéciaux qui peuvent être présents dans une chaîne de texte. Cependant, le script de réception doit attendre une couche supplémentaire d'urlencode(), et agir en conséquence. Ou si vous savez que la chaîne a été encodée, ne pourriez-vous pas simplement la transmettre telle quelle? Aucun autre encodage n'est nécessaire.

3

Vous devriez être capable de coder récursivement l'URL autant de fois que vous le souhaitez. Si vous encodez un caractère comme/vous obtiendrez à plusieurs reprises:

0:/
1: %3F 
2: %%3F 
3: %%%%3F 

etc.

+0

encode ('?') =% 3F. De même, lors de l'encodage récursif, la seule partie qui est codée à nouveau est le '%', donc elle finit par ressembler plus à '% 2525253F', où decode ('% 25') =% –

0

Ou tout simplement urldecode le titre et l'URL, puis urlencode toute la chaîne.

0

Comme nous l'avons déjà mentionné, vous pouvez encoder des URL autant que vous le souhaitez, mais vous devriez savoir que plus vous encoderez de données d'URL, plus leur longueur augmentera, deux fois plus longtemps. ce qui sera ennuyeux pour les utilisateurs si c'est trop long. il peut également y avoir une limitation sur la longueur de l'URL sur certains navigateurs. Il y aura également un surcoût de codage et de décodage des données côté serveur. En bref, vous devriez être sûr d'en avoir besoin avant d'encoder/décoder plusieurs fois.