2010-03-12 4 views
5

Ho un sito Web che utilizza facebook, twitter, deliziosi link di condivisione. Contengono un url con l'url del sito web che desideri condividere. Il problema è che poi voglio inviare l'url facebook/twitter/delicious attraverso una pagina di reindirizzamento php.E 'possibile urlencode un url che contiene un url con l'url codificato?

Funzionerà per codificare un URL all'interno di un URL codificato? Ci saranno effetti collaterali?

Per semplificare la mia domanda:

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

Per comprendere la ricorsione, è necessario prima comprendere la ricorsione. –

risposta

9

è possibile codificare una stringa più volte con la codifica per cento e ottenere il valore originale decodificando la stessa quantità di volte:

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

Qui il il valore di $str viene codificato tre volte e quindi decodificato tre volte. L'output di codifica e decodifica ripetute è identico al valore di $str.

Quindi provare questo:

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

Capisco come farlo ... Ero solo preoccupato che l'urlencoding di un URL urlencoded potesse causare la decodifica dell'intero URL nella pagina di reindirizzamento ... Quindi, suppongo che le codifiche di url annidate funzioneranno correttamente? – Mark

+0

Come ha detto @Gumbo: "Puoi codificare un URL più volte e ottenere il valore originale quando lo decodifichi la stessa quantità di volte". Ogni volta che codifichi, tutte le parti codificate di prima sono codificate * di nuovo * – Josh

+1

@Mark: quindi nel caso in cui sei ancora confuso, no, l'URL di reindirizzamento non decodificherà l'intero URL, rimuoverà solo un "livello" di codifica. Il tuo piano è sano, in altre parole. Codifica – Josh

1

Va bene di aggiungere un secondo strato di URLEncoding. L'idea di URLEncoding è impedire al server di interpretare erroneamente caratteri speciali che potrebbero essere presenti in una stringa di testo. Tuttavia, lo script ricevente deve aspettarsi un ulteriore livello di urlencode() e agire di conseguenza.

Oppure, se si conosce che la stringa è stata codificata tramite URL, non è possibile semplicemente passarla così com'è? Non è necessaria un'ulteriore codifica.

3

Dovresti riuscire a codificare ricorsivamente l'URL tutte le volte che vuoi. Se si codifica un personaggio come più volte/otterrete:

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

ecc

+0

('?') =% 3F. Anche quando ricorsivamente codifica, l'unica parte che viene nuovamente codificata è il '%', quindi finisce per essere più simile a '% 2525253F', dove decode ('% 25') =% –

0

O semplicemente urldecode il titolo e l'URL, quindi urlencode l'intera stringa.

0

Come accennato in precedenza, puoi codificare gli URL quanto vuoi, ma dovresti sapere quante più volte codifichi i dati url più aumenterà di lunghezza, potrebbe essere due volte più lungo. che sarà fastidioso per gli utenti se è troppo lungo. inoltre potrebbe esserci una limitazione sulla lunghezza dell'URL su alcuni browser. Anche sul lato server ci sarà una codifica in testa e la decodifica dei dati. In breve, dovresti essere sicuro di averne bisogno prima di codificare/decodificare più volte.

Problemi correlati