文字化けしないように文字コードの違うページへフォームをPOST/GETする方法

UTF-8からShift_JISのページへPOSTする場合の方法。(GETでも同じ方法でOK)

POST先の文字コードは、以下でSHIT_JISとなっている箇所を変えれば対応できる。

#方法

#IE以外(Chrome / Firefox)

<form name="form1" method="POST" accept-charset="Shift_JIS">

accept-charsetを指定する。

#IE用

IEは accept-charset が効かないので、以下のようなJSが必要になる。

document.forms.form1.addEventListener('submit', set_sjis_charset);

function set_sjis_charset(e) {
  var ua = window.navigator.userAgent.toLowerCase();
  var isIE = (ua.indexOf("msie") > -1 || ua.indexOf("trident/7.0") > -1 || ua.indexOf("edge") > -1);
  if (isIE) {
    e.preventDefault();
    this.removeEventListener('submit', set_sjis_charset);
    var tmp = document.charset;
    document.charset = 'Shift_JIS';
    this.submit();
    document.charset = tmp;
  }
}

キャラセットを変更するのはIEだけで良いのでIEチェックをしている。