Analysezeichenfolge zum Hinzufügen zur URL-codierten URL

73

Angesichts der Zeichenfolge:

"Hello there world"

Wie kann ich eine URL-codierte Zeichenfolge wie folgt erstellen:

"Hello%20there%20world"

Ich würde auch gerne wissen, was zu tun ist, wenn die Zeichenfolge auch andere Symbole enthält, wie zum Beispiel:

"hello there: world, how are you"

Was wäre der einfachste Weg, dies zu tun? Ich wollte analysieren und dann Code dafür erstellen.

Mohamed El Mahallawy
quelle

Antworten:

128

Im Jahr 2019 ist URI.encode veraltet und sollte nicht verwendet werden.


require 'uri'

URI.encode("Hello there world")
#=> "Hello%20there%20world"
URI.encode("hello there: world, how are you")
#=> "hello%20there:%20world,%20how%20are%20you"

URI.decode("Hello%20there%20world")
#=> "Hello there world"
Arie Xiao
quelle
4
Wenn Sie auch Punkte codieren möchten:URI.encode('api.example.com', /\W/)
Dennis
3
Funktioniert nicht, z URI.encode("http://google.com") => "http://google.com". Besser verwenden CGI.escape( "https%3A%2F%2Fgoogle.com")
localhostdotdev
20

Während die aktuelle Antwort besagt, URI.encodedass die Nutzung seit Ruby 1.9.2 veraltet und veraltet ist. Es ist besser zu nutzen CGI.escapeoder ERB::Util.url_encode.

Benjamin
quelle
17

Rubys URI ist dafür nützlich. Sie können die gesamte URL programmgesteuert erstellen und die Abfrageparameter mithilfe dieser Klasse hinzufügen. Die Codierung wird dann für Sie ausgeführt:

require 'uri'

uri = URI.parse('http://foo.com')
uri.query = URI.encode_www_form(
  's' => "Hello there world"
)
uri.to_s # => "http://foo.com?s=Hello+there+world"

Die Beispiele sind nützlich:

URI.encode_www_form([["q", "ruby"], ["lang", "en"]])
#=> "q=ruby&lang=en"
URI.encode_www_form("q" => "ruby", "lang" => "en")
#=> "q=ruby&lang=en"
URI.encode_www_form("q" => ["ruby", "perl"], "lang" => "en")
#=> "q=ruby&q=perl&lang=en"
URI.encode_www_form([["q", "ruby"], ["q", "perl"], ["lang", "en"]])
#=> "q=ruby&q=perl&lang=en"

Diese Links könnten auch nützlich sein:

der Blechmann
quelle
Wie kann ich das erforderliche 'uri' in die Datei html.erb einbetten? Oder muss ich es in die Steuerung stecken?
Mohamed El Mahallawy
2
Das Richtige, wenn mehr als nur eine triviale Logik benötigt wird, ist es, alle "Berechnungen" in der Steuerung durchzuführen.
der Blechmann
Cool. Wann sollten wir Helfer einsetzen? Und was ist, wenn wir Computer machen, die an vielen Stellen im Helfer verwendet werden und für die Controller enthalten sind? Ist das wichtig?
Mohamed El Mahallawy
16

Wenn jemand interessiert ist, ist der neueste Weg, dies zu tun, in ERB:

    <%= u "Hello World !" %>

Dies wird rendern:

Hallo% 20World% 20% 21

u steht für url_encode

Die Dokumente finden Sie hier

oschvr
quelle