環境依存文字


デコードの重複注意ポイント

デコードの重複 複数回のデコード処理が重複して実行されることで問題が発生することがある。   複数人でアプリケーションを開発するようなケースにおいて,プログラマの誰もがデータ処理の直前にデコード処理を通す習慣をつけていたとする。この場合,単体でのテストではデコード処理は一度しか行われないため,正常に動作するだろう。しかし,システムとして統合した場合,複数段階のデータ処理を経る際に本来不必要な複数回のデコードが行われてしまう。   上記のdecode2プログラムに相当するデコード処理を重複して行った場合,データの内容に問題が生じないケースとデータの内容が損なわれるケースの2つを示したものである。(a)は2回デコードしても実害がない例である。これに対して(b)は入力として「%83e%83X%83g%2500%8A%EB%8C%AF」を与えて2回目のデコード処理でエラーになるケースだ。これは,最初の文字列中に「%2500」という部分が含まれているのが原因である。「%25」は「%」を表すエンコードであるため,「%2500」は1回目のデコード処理で「%00」に変換される。2回目のデコード処理では「%00」をデコードすることになり,ナル文字が発生してエラーになるのである。このような問題を避けるため,エンコード文字列に対するデコード処理が行われるべきタイミングは1箇所に絞らなければならない。 クエリストリングを用いたWebアプリケーションでは,URLの後ろに,URLとキーワードの区切り文字「?」が入り「キーワード= 値」の形式でWeb サーバに送られてくる。複数のキーワードを用いたクエリストリングでは各キーワード間は「&」を使用し区切られる。このようにして渡されるクエリストリングは,その全体をデコード処理後,区切り文字「&」で各キーワードを切り出す方法を用いると1回ですべてのデコード処理を行うことができるため,とても効率的であるように思える。   しかし,このような方法は決して採用してはならない。なぜなら,エンコード文字列に「%26」や「%3D」といったデータが含まれる場合があるからである。この「%26」,「%3D」に対してデコード処理を行うとそれぞれ「&」,「=」に変換される。これは,クエリストリングの区切り文字と同じであるため,キーワードを切り出す処理が,正常に動作しなくなってしまうのである。   このような問題を避けるには,キーワードを切り出す処理を実行した後に,各キーワードに対してデコード処理を行うようにする。デコード処理と部分列の切り出しの順序を誤ると,予期せぬ結果を生むことがある


機種依存文字とは   外字   機種依存文字と呼ばれる由来   機種依存文字のサンプル   IBMと文字   制御文字   ASCIIコード   unicode   unicodeその他   誤表示   数値参照文字   BOMとは   文字コード表とは   SJIS   EUCJP   NEC特殊文字とは   CP932とは   符号化文字集合とは   メールと文字化け   base64とは   mime形式とは   urlencodeとは   SJISとJISコードの違い   改行とは   空白文字   Base64   ASCII文字←→URLエンコードの対応表   phpでのダブルクォート(シングルクォート) の違い   URLエンコードの気を付けるポイント   デコードの重複の注意ポイント   マルチバイト文字列   htmlエンコーディング   python文字列扱い   php SJIS-WIN   正規表現   正規表現とエスケープ文字   よくつかう正規表現例   メタ文字   波ダッシュ   JWTとは   pythonの文字コード   リモートからsudoを実行   pythonをバージョンを指定して実行   タイムスタンプとは   jsonとは   csvとは   webmとは   円マークとバックスラッシュ問題   ajax cache問題   ajax 非同期・同期通信設定   javaScriptでURLエンコード方法   拡張子一覧