2016-04-02 4 views
-1

Ich habe diese URLs:URL-Codierung wieder auf true URL

http://www.jobbsafari.se/jobbsoekning?q=trainers.php%253Fid%253D'%2Band'' 
http://www.jobbsafari.se/jobbsoekning?q=trainers.php?id%253D%2Band' 
http://tay-sen.com.ua/trainers.php?id=12%26action=show_photos%26m_lang_id=9' 

Ich brauche sie wieder zu ihrem wahren URL zu codieren. Im Moment ist ich mit:

string = ARGV[0] 
string.gsub("%25", '%').gsub("%53", "S").gsub(etc..) 

Gibt es einen besseren Weg, um mehr gsub ing zu tun, ohne .gsub.gsub.gsub zu tun?

+0

Sie nicht das Rad neu erfinden. – sawa

+0

@sawa Ich stimme dir zu, aber wenn ich nicht "das Rad neu erfinde" ist das Programm, für das es gedacht ist, jedes Mal fehlgeschlagen. – 13aal

+0

Ich verstehe dich nicht. – sawa

Antwort

5

Verwenden Sie die uri:

require 'uri' 
URI.decode(your_url) 

Es wird alles von der URI-Kodierung ersetzen.

+0

Ich fühle mich irgendwie dumm jetzt ... – 13aal

+0

@ 13aal wir sind hier, um Ihnen zu helfen;) – Mark

+1

@ 13aal Es wäre gut, wenn Sie die Antwort akzeptieren. :) So, um Danke zu sagen. ;) –

1

Das Problem besteht darin, dass Ihre URLs Abfragen enthalten, die mehrfach codiert wurden.

Wenn die Codierung einmal aufgetreten sind Sie in Ordnung, aber wenn Sie mehrere Schichten haben kann es chaotisch:

require 'uri' 

uri = URI.parse("http://tay-sen.com.ua/trainers.php?id=12%26action=show_photos%26m_lang_id=9") 
query = URI.decode_www_form(uri.query).to_h 
query # => {"id"=>"12&action=show_photos&m_lang_id=9"} 

URI.decode_www_form(query['id']).to_h 
# => {"12"=>"", "action"=>"show_photos", "m_lang_id"=>"9"} 
+0

Okay, und wie beantwortet er meine Frage? Wenn ich einen Hash der dekodierten URL habe, was mache ich dann von dort ..? – 13aal

+0

Es hilft, die Frage zu beantworten, indem es dir sagt, dass Drachen vor dir sind. Sie müssen sich bewusst sein, dass Seiten mehrfach codierte URLs enthalten. Wenn Sie versuchen, zur ursprünglichen URL zurückzukehren, müssen Sie Ebenen zurücksetzen. Es gibt keine Methode, die es für dich tun würde; Sie können die erste Decodierung durchführen, aber Sie müssen in der Lage sein, zu entscheiden, ob eine weitere Decodierung notwendig ist. Es ist nicht schwer herauszufinden, wie man iterativ dekodiert und dann checkt. –

+0

Das macht für mich Sinn, danke für die Information. – 13aal

Verwandte Themen