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.