日本語版
最新ニュース
科学&テクノロジー

RubyでURL文字列をエンコードする方法

短い答え、Ruby文字列のエンコード2024年版は次のとおりです。1 URI::Parser.new.escape(my_url_string) すでにいっぱいです スタックオーバーフローの質問 これについては、Ruby 3 以降では、(大幅な調整なしで) 動作する唯一のバージョンは上記のもののようです。完全な例:1 2 3 4 5 6 7 8 require 'uri' my_string = "hello world" my_url_string = "https://somedomain.com?word=#{my_string}" URI::Parser.new.escape(my_url_string) # => "https://somedomain.com?word=hello%20world" 例外: エスケープされていない文字ただし、引用符を渡そうとすると、これは機能しません。1 2 3 4 5 6 7 require 'uri'…

RubyでURL文字列をエンコードする方法

1706499222
2024-01-25 11:59:49

短い答え、Ruby文字列のエンコード

2024年版は次のとおりです。

1
URI::Parser.new.escape(my_url_string)

すでにいっぱいです スタックオーバーフローの質問 これについては、Ruby 3 以降では、(大幅な調整なしで) 動作する唯一のバージョンは上記のもののようです。

完全な例:

1
2
3
4
5
6
7
8
require 'uri'

my_string = "hello world"
my_url_string = "https://somedomain.com?word=#{my_string}"
URI::Parser.new.escape(my_url_string)

# => "https://somedomain.com?word=hello%20world"

例外: エスケープされていない文字

ただし、引用符を渡そうとすると、これは機能しません。

1
2
3
4
5
6
7
require 'uri'

my_string = "hello?world"
my_url_string = "https://somedomain.com?word=#{my_string}"
URI::Parser.new.escape(my_url_string)

# => "https://somedomain.com?word=hello?world"

これには少しのハックが必要です .gsub('?', '%3F')

1
2
3
4
5
6
7
require 'uri'

my_string = "hello?world"
my_url_string = "https://somedomain.com?word=#{my_string.gsub('?', '%3F')}"
URI::Parser.new.escape(my_url_string)

# => "https://somedomain.com?word=hello%253Fworld"

なぜちょっとしたハックをするのか? まあ、深く掘り下げる時間はありませんでしたが、 escape ただし、引用符がすでに通常の URL の一部である (クエリ文字列の区切り文字である) という事実を考慮すると、この文字はエンコードされていないと思います。

それでは、エンコードを試してこの仮定を押し広げてみましょう :// (この部分は演習として残しました:)

OK、それらはエンコードされていません。 それが最後の段落につながります。

Ruby における URL 文字列エンコーディングの堅牢性

他の方法もいくつか試しましたが、現時点では間違いなくこれが効果的です。 トピックのタイトルに意図的に年を記載したのは、この答えがたとえば 2 年か 3 年後も有効かどうか完全に確信が持てないためですが、現時点では、これが私が見つけた中で間違いなく最も堅牢な方法です (つまり遠い)。

というキャラクターとは別に、 実は 通常の URL に属していますが、他にトリッキーなものは見つかりませんでした。

ユースケースに応じて、これらの文字をエスケープすることが良いアイデアになる場合もあれば、悪いアイデアになる場合もあります。

結論

この結論には特別なことは何もありません。この記事のおかげで今日 5 分を勝ち取っていただければ幸いです 🙂

最高、

デビッド。

#RubyでURL文字列をエンコードする方法

執筆者について: nipponese

Nipponese News編集部は、国内外のニュースを日本語で分かりやすくお届けします。