Aiuto su decodifica request_uri con caratteri giapponesi

Ciao a tutti,

ho un piccolo problemino…

Nell’applicazione rails appena mandata in produzione non riesco a capire
come decodificare i caratteri che mi arrivano in request_uri.

Mi spiego meglio, mi vengono fatte delle chiamate del tipo:

request.request_uri =>
/navigation/europe_%E3%82%B9%E3%83%9A%E3%82%A4%E3%83%B3_%E3%83%90%E3%83%AB%E3%82%BB%E3%83%AD%E3%83%8A_all_all.html

Ora io dovrei recuperare i dati relativi ai parametri che ci sono tra
gli underscore e confrontarli con quanto ho sul db ovvero:

%E3%82%B9%E3%83%9A%E3%82%A4%E3%83%B3 sul db è memorizzato come: スペイン

%E3%83%90%E3%83%AB%E3%82%BB%E3%83%AD%E3%83%8A sul db è memorizzato come:
バルセロナ

Il confronto tra il valore della uri e del db fallisce, sarebbe inceve
corretto se i caratteri avessero \x al posto del % es.

\xE3\x82\xB9\xE3\x83\x9A\xE3\x82\xA4\xE3\x83\xB3 questo nel db verrebbe
trovato correttamente ma invece %E3%82%B9%E3%83%9A%E3%82%A4%E3%83%B3 no
!!!

Qualcuno riesce a darmi qualche dritta ?

Grazie in anticipo !!!

guarda se funziona con:

eval(’"’ + request.request_uri.gsub(’%’,’\x’) + ‘"’)

Grandioso !!!

Funziona alla grande !!!

Ma mi chiedo una cosa, come mai partono dal browser dei caratteri utf8
=> arrivano codificati con % ma non vengono ritrasformati in automatico
dal framework ? Forse perchè sto lavorando sotto Rails 1.2.6 ?

Mi aspettavo infatti che si arrangiasse il framework a fare questo tipo
di codifica/decodifica, invece la parte della decodifica me la devo
smazzare per conto mio cambiando i % in \x, sono un po’ perplesso…

Comunque grazie per la soluzione, ha aggirato il problema alla grande.

Gianluca T. wrote:

Grandioso !!!

Funziona alla grande !!!

Ma mi chiedo una cosa, come mai partono dal browser dei caratteri utf8
=> arrivano codificati con % ma non vengono ritrasformati in automatico
dal framework ? Forse perch� sto lavorando sotto Rails 1.2.6 ?

Mi aspettavo infatti che si arrangiasse il framework a fare questo tipo
di codifica/decodifica, invece la parte della decodifica me la devo
smazzare per conto mio cambiando i % in \x, sono un po’ perplesso…

Comunque grazie per la soluzione, ha aggirato il problema alla grande.

E’ giusto, però attento, così potresti essere vulnerabile:
Sarebbe facilmente hackabile scrivendo un indirizzo contenente uno
script dannoso nell’url, come:
/navigation/%22%3Bexit%3B%22_nil_nil_nil.html
%22 chiude le virgolette, %3B mette un “;”, e alla fine viene eseguito
il seguente script:
“”;exit;""
Un esempio banalissimo, però si possono fare cose ben peggiori

Forse sarebbe meglio fare una cosa del genere:
decod = request.request_uri.gsub(/%([\d\w][\d\w])/) {$1.hex.chr}
Conviene usare poco l’eval se si tratta di usare l’input dell’utente.