POSTフォームパラメータとして渡す文字列(URLなど)をエンコードする必要がありますか?
つまり、フォームパラメータの1つとして、必要なURLをWebアプリケーション(Ruby on Rails)に渡したいと思います。では、URL / URIにエンコードする必要のある潜在的な文字はありますか?それとも、レールはとにかくこれを処理しますか?
POSTフォームパラメータとして渡す文字列(URLなど)をエンコードする必要がありますか?
つまり、フォームパラメータの1つとして、必要なURLをWebアプリケーション(Ruby on Rails)に渡したいと思います。では、URL / URIにエンコードする必要のある潜在的な文字はありますか?それとも、レールはとにかくこれを処理しますか?
POST フォーム パラメータとして渡す文字列 (URL など) をエンコードする必要がありますか?
それは、POST リクエストの作成/送信に何を使用しているかによって異なります。リクエスト本文を自分で直接作成している場合は、各パラメーターを URL エンコードする必要があります。
POST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded
foo=bar&url=http://www.example.com/url?innerparameter1=1&innerparameter2=2
これは良くありません:innerparameter2
実際には、外側のフォームでエンコードされた文字列のパラメーターです。次のようなエンコーディングが必要です。
foo=bar&url=http%3A//www.example.com/url%3Finnerparameter1%3D1%26innerparameter2%3D2
ただし、より高いレベルのものを使用して POST 要求を作成し、パラメーター文字列の何らかのマッピングを渡す場合は、そのコンポーネントが URL エンコードを処理することを期待します。
コード?
ボビンスが言及しているように、URL パラメーターとして渡すデータはすべてエンコードする必要があります。多くの場合、使用しているライブラリが何であれ、これを処理します。これは、すべての HTTP リクエストに適用されます。
たとえば、API にはエンドポイントがありますGET /sites/:name
。cURL を使用すると、次のようになります。
curl http://example.com/sites/google%2Ecom
URI.encode
Ruby/Rails では、とを使用できますURI.decode
。
>> URI.encode('google.com', /\W/)
"google%2Ecom"
>> URI.decode('google%2Ecom')
"google.com"
一般的に、プログラムまたはユーザー入力データを HTML ページに出力する場合は、HTML 用にエンコードする必要があります。多くの場合、URL には & 文字が含まれており、ブラウザーが問題なく処理しているように見えても、エンコードする必要があることに注意してください。
私は Ruby の専門家ではないので、Ruby でそれがどのように行われるのかわかりませんし、Ruby on Rails でそれができるかどうかもわかりません (それには少し驚かれるかもしれませんが)。私が提案するガイドラインは言語固有のものではありません。