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.

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"

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.


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:


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.