Internet Explorer でGETが予期しない動作をする

高橋です。

現在開発中のシステムで、サーバー側のプログラム(PHP)へGETで値を渡す処理を書いていたのですが、InternetExplorerで実行すると何故か正常に値が渡せないという現象が発生していました。
他のブラウザでは問題なく動作するので、プログラム側の不具合ではないようなのですが、IEでアクセスする方も少なくないので、解決策を調べてみました。

1.URLが約2083文字を超えるとIEで扱えない

IE11で使用可能なURL文字数が2083文字しかない件 – 文系プログラマによるTIPSブログ
によると、InternetExplorerでは、URLの最長文字列長は2083文字までらしく、それ以上は認識できないとのこと。
GETでパラメーターを複数入れると、URLがどんどん長くなっていってしまうため、あまり渡す値が多い場合は注意が必要かもしれません。

2.Eで2番目以降のGETパラメータが実体参照になり値が取得できない

少し古い記事ですが
IEで2番目以降のGETパラメータが実体参照になり値が取得できないバグ – DevAchieve

によると、GETで渡すパラメーターの1個目と2個目の間にいれる&記号によって、2個目以降の値が実体参照として処理されてしまうことがあるとのこと。

他にもGETで渡したパラメーターの値が文字化けしてしまうケースなど、IEでは予期しない動作をしてしまうことがあるようです。

いろいろ考えた結果、デバッグの際はIE以外のブラウザでURL直打ちで値を渡せるGETを使い、うまく動くことを確認したらPOSTに切り替える方法で運用することにしました。

大抵のフレームワークではメソッドの判定を簡単に行うことができるように関数が用意されています。
例えばfuelでは

if( Input::method() == 'POST' ) {
   //POSTされた場合の処理
}
if( Input::method() == 'GET' ){
  //GETされた場合の処理
}

のように、メソッドに応じて処理を書き分けることもできます。
中の処理を同じものにしておけば、クライアント側の使用するメソッドを切り替えるだけで済むので便利です。

今後はIEを考慮しないWebアプリも増えていきそうですが、現時点ではIEがまだ現役で使われているところも多いかと思います。
他のブラウザとIEの互換性を確保するためには、いろいろ工夫していく必要がありそうです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG