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

1 min read

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

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

方法

IE 以外(Chrome / Firefox)

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

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 チェックをしている。