「utf8 = true」よりも「utf8 =✓」の使用の方が望ましいですか?


569

最近、クエリパラメータ「utf8 =✓」を含むURIをいくつか見ました。私の最初の印象(「うーん、かっこいい」と思った後)は、これを使用して壊れた文字エンコードを検出できるということでした。

それで、これは文字エンコーディングの潜在的な問題を解決するより良い方法ですか、それとも単にハックを楽しんでいる開発者ですか?


7
同意しません。URNのように見え、Bitcoinなどのクエリパラメータを受け取るスキームがあります。URIはブラウザに限定されません。en.wikipedia.org/wiki/URI_schemeを参照してください。この質問、ブラウザがプロトコルハンドラにアクセスするときに文字エンコードが必要な一般的なケースにも対応する場合があります。
ゲイリーロウ

3
これらのURLの例を挙げてください。
hakre

10
トピックから外れていますが、OK。これが私の個人的な寄付であるビットコインURIです:bitcoin:1KzTSfqjF2iKCduwz59nv2uqh1W2JsTxZH?amount = 0.5&label = Agile%20Stack スキームは基本的にクエリパラメータを持つURNですが、プロトコルハンドラに渡されることに注意してください。この種のURIは、おそらく「utf8 =✓」回避策からも恩恵を受ける可能性があります。
ゲイリーロウ

1
@GaryRoweそれで、そのリンクから寄付をもらったことはありますか?
キラレッサ

回答:


814

デフォルトでは、IEの古いバージョン(<= 8)は、可能であればフォームデータをLatin-1エンコードで送信します。Latin-1で表現できない文字を含めることにより、IEはフォームの送信にUTF-8エンコーディングを使用するように強制されます。これにより、データベースの永続化など、さまざまなバックエンドプロセスが簡素化されます。

パラメーターが代わりにあった場合、utf8=trueこれらのブラウザーでUTF-8エンコードはトリガーされません。


8
@LarsViklund私のコメントでもっと明確になっているはずです。つまり、文字エンコーディングに関連付けられた検証は、バイパスされるのではなく、簡素化されるということです。
ゲイリーロウ

3
@Lars正しい、入力を確認する必要がなくなるわけではありません。しかし、それはエンコードの微調整だけでセキュリティ取り扱いの一部となり、あなたの「標準処理」パスの概念汚染チェックしていないという意味ではありません
ギャレス・

36
stackoverflow.com/questions/3222013/…も参照してください。どうやらRuby on Railsは雪だるまキャラクターを使用していたため、あいまいではないがおかしくないチェックマークに変更されたようです。
ジャックV。

11
@JohnLBevan受信側では無視されます。ブラウザにlatin1ではなくutf8で送信するように強制するのは仕事です。また、ie =💩としても見ました(これは「プーの山」のコードポイントです。コメントでレンダリングされていないようです。)
cabbey

3
@Gareth:IE <= 8フォームはドキュメントやフォームのエンコードをサポートしていないという声明をバックアップできますか?
hakre
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.