PDA

View Full Version : [PHP] Conversione Caratteri speciali per URL


magonicola
09-11-2010, 14:13
Ciao,

sò che l'argomento non è nuovo ma non riesco proprio a capire come gestire i caratteri speciali nelle URL. Nessuna funzione per ora ha fatto quello che mi serve. Dovrei convertire una stringa del tipo (NON è un esempio, anche se sembra una stringa stranissima):

http://stidue.net/fotovoltaico/pròvà+fòldèér/àèéìòù§^#@ç°+-() !£$%&|.txt

nella seguente (unica forma riconoscibile da tutti i browser)

http://stidue.net/fotovoltaico/pr%c3%b2v%c3%a0+f%c3%b2ld%c3%a8%c3%a9r/%c3%a0%c3%a8%c3%a9%c3%ac%c3%b2%c3%b9%c2%a7%5e%23@%c3%a7%c2%b0+-()%20!%c2%a3$%25&%7c.txt


Ho appositamente messo molti caratteri speciali così da coprire quasi tutti i casi possibili.

Mi potete aiutare?

Grazie mille...

Supdario
09-11-2010, 14:21
$url = urlencode($url);

magonicola
09-11-2010, 14:32
Non va (già provata)

<? echo "http://stidue.net/fotovoltaico/pròvà+fòldèér/àèéìòù§^#@ç°+-() !£$%&|.txt" ?>
<br />
<? echo urlencode("http://stidue.net/fotovoltaico/pròvà+fòldèér/àèéìòù§^#@ç°+-() !£$%&|.txt") ?>

Risultato:

http://stidue.net/fotovoltaico/pròvà+fòldèér/àèéìòù§^#@ç°+-() !£$%&|.txt

http%3A%2F%2Fstidue.net%2Ffotovoltaico%2Fpr%F2v%E0%2Bf%F2ld%E8%E9r%2F%E0%E8%E9%EC%F2%F9%A7%5E%23%40%E7%B0%2B-%28%29+%21%A3%24%25%26%7C.txt

In pratica sostituisce anche quello che non deve sostituire (vedi i : nell'http, gli / e non so cos'altro).

Supdario
09-11-2010, 14:46
Beh, in questo caso penso che basti un semplice workaround:

$url = strtr(urlencode($url), array('%2F' => '/', '%3A' => ':'));

magonicola
09-11-2010, 15:03
Niente...
è proprio la codifica in URL ad essere errata!

Dovrebbe essere così (solo inizio):

stidue.net/fotovoltaico/pr%c3%b2v%c3%a0+

ed invece viene tradottaa dalla funz php così:

stidue.net/fotovoltaico/pr%F2v%E0%2Bf%F2ld

(se vuoi ti posto tutto il link... lo puoi vedere su:
http://stidue.net/fotovoltaico/pr%C3%B2v%C3%A0+f%C3%B2ld%C3%A8%C3%A9r/test.php
)

Non so proprio come fare... sembra una cosa banale ma non lo è purtroppo

magonicola
09-11-2010, 15:13
Al link:

http://tinyurl.com/testurlconv

tutte le prove fatte finora.

Da notare la differente codifica tra risultato corretto e funzioni PHP :(

Supdario
09-11-2010, 16:47
La funzione è corretta, è il nome file che hai usato tu che è sbagliato. Non puoi mettere il carattere "#", dato che è riservato alle ancore (come lo sono anche i caratteri ? e & che servono per i parametri GET).