HTML

【Java】【HTML】特定の文字をサーバにPOSTすると、あるブラウザでPOSTしたときだけ違う文字に書き換えられる件について


「テキストボックスやテキストエリアに文字を入力してサーバにPOSTするとき、リクエストを送るブラウザによってサーバ側が受け取る文字(正確には「文字コード」)が変わる」
というケースを発見したっていうか実際に遭遇した。
これはちょっと前にツイッターでつぶやいた以下の内容に端を発し、事象を追求していく中でわかった事実である



これが、どういう理由や背景があるものなのかわからないが、
こういう、「サーバ処理に届く前に値を書き換えられる」というようなことやられると、
基本サーバ側で待ち構えているプログラムでは手の出しようがなくなるので、ちょっと困る。
(自分たちが作った範囲以外で起きる事象に対する動作保障はできない、というのが一般的な見解だ…昨今はそれが通じないことも多いが)
とりあえず実験してわかった範囲での記録をここに挙げていく。

※実験の過程で、WikipediaのUnicodeのページを参考にさせていただいた。
https://ja.wikipedia.org/wiki/Unicode
以後「Wikipedia」でという記述が合ったら上記のリンク先のページがそれだと解釈していただきたい。


 


【HTML】制御文字をいろんなブラウザで表示させてみよう


IEでTAB(U+0009)を見ると勝手に半角スペース(U+0020)に変えられてる件。
他のブラウザや制御文字はどーなの?ってのを調べた。

 


 


【IE】fancybox起動後にServlet実行すると待機中表示がされない


IEでfancyboxをservletで呼び出したり、もしくはfancyboxからservletを呼び出したりすると、
昔で言うところの「砂時計」にあたる待機中表示が消える(待機中表示にならなくなる)。
特定のケースでは一時的に待機中表示が出たりもするが、これに関してもサーバ側の処理が終わる前に必ず消える。
fancyboxを使わない限りは、待機中表示は処理中であれば消えたりしないので、fancyboxを絡めた場合にだけどうもこうなってしまう。
ただ、Google ChromeとFire Foxはfancyboxがあってもちゃんと待機中表示してくれる。どうもIEだけのようだ。
うん、「また」なんだ。すまない。(´・ω・`)

まあ結構アレな(稀有な)使い方のようにも思えるから普通は起きないのかなあ~
でも俺起きて困ったんだよなあ~

※fancyboxは以下のVer1.3.4を使用しました
http://fancybox.net/home
※fancyboxを使った基本的な実装メモは以下を参考にしました
http://www.webdesignleaves.com/wp/jquery/1362/

 


 


【HTML】input type=fileのC: akepath問題


input type="file"でファイルを選択すると、選択されたファイルが実際に位置しているローカルディスクのフルパスとは違うパス値として自動的にC:\fakepath\(選択したファイル名)に変換されることがある。
ググってみると昨今のブラウザのセキュリティ仕様で勝手にそういう風に変換されるらしい。
ただこれはブラウザ毎にも少し異なる動きをするし、ローカルのHTMLを直接ブラウザで開いた場合やサーバ上に存在するHTMLを開いた場合でも異なる。
実験して分かった範囲をまとめてみる。


 


【HTML】SUBMITボタンでVALUE未指定だとIEで印刷プレビューすると「クエリ送信」になる


SUBMITにVALUE未指定だと、IEで印刷プレビューすると勝手に「クエリ送信」って文字列が付くらしい。
ググってみると、昔のバージョンのIEだと、
SUBMITにVALUEが入ってない場合、ブラウザ表示の段階から「クエリ送信」って表示する仕様だったようだ。
現代のIEの印刷プレビューにだけそれが残っているのはその名残か?

この現象は、Win7/IE11で再現。
Google Chrome、FireFoxではおきない。
要するにIEだけで起きる。
はっきり言っていい迷惑だ。
余計な文字を勝手に出すな!と言いたい。


 


【HTML】X-UA-CompatibleによるIE互換表示制御と注意点


IE11には「互換表示」というオプションがあって、
ツールバーの「ツール」→「互換表示設定」で互換表示の対象ドメインを指定できる。
互換表示対象になるとIE7相当で画面表示できる(とどこかで聞いた)。
IEはバージョンによってレンダリングの仕方(画面への描画の方法)が違うらしく
互換表示の有無によっていろいろ見え方が変わる。
互換表示の有無に関わらず表示内容を統一する場合、
以下のmetaタグ(以後X-UAと呼ぶ)をいれることでそれを制御できる。

  
<meta http-equiv="X-UA-Compatible" content="IE=edge">  


のだが、ちょっとした注意が必要である。
以下に実例を示す。