UTFに移行されることなく10年以上経過するレガシーシステム。既に画面遷移の設計が破綻ぎみ。
やむを得ず、EUCで生成されているフォームをクライアントからバックグラウンドで送信することに。
ajax で POST するフォームの全てのデータをエンコードする
$('formname').serialize();
は、UTF8 前提の javascript なので EUC-JP や ShiftJIS なフォームであっても UTF8 として送信してしまう。
●前提環境
PHP Version 5.6.15
default_charset = EUC-JP
mbstring.language = Japanese
mbstring.encoding_translation = Off
mbstring.detect_order = auto
jQuery JavaScript Library v1.6.2
今回は、
http://polygon-planet-log.blogspot.jp/2012/04/javascript.html
の encoding.js を利用させていただく場合の具体的な実装例...▼
やむを得ず、EUCで生成されているフォームをクライアントからバックグラウンドで送信することに。
ajax で POST するフォームの全てのデータをエンコードする
$('formname').serialize();
は、UTF8 前提の javascript なので EUC-JP や ShiftJIS なフォームであっても UTF8 として送信してしまう。
●前提環境
PHP Version 5.6.15
default_charset = EUC-JP
mbstring.language = Japanese
mbstring.encoding_translation = Off
mbstring.detect_order = auto
jQuery JavaScript Library v1.6.2
今回は、
http://polygon-planet-log.blogspot.jp/2012/04/javascript.html
の encoding.js を利用させていただく場合の具体的な実装例...▼
index.php はEUCで
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<title>TITLE</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.2.min.js"></script>
<script type="text/javascript" src="./encoding.js"></script>
<script type="text/javascript">
<!--
function serializeFormEUCJP( idForm ){
var str2array = function(str){
var array = [],i,il=str.length;
for(i=0;i<il;i++) array.push(str.charCodeAt(i));
return array;
};
var forms = document.getElementById( idForm );
var array = [];
for(var i = 0; i < forms.length; i++){
var elem = forms.elements[i];
var strArray = str2array( elem.value );
strArray = Encoding.convert(strArray,"EUCJP");
array.push(encodeURIComponent(elem.name) + '=' + Encoding.urlEncode(strArray) );
}
return array.join('&');
}
function test(){
/// var q = $('#form2ajax').serialize();
var q = serializeFormEUCJP( "form2ajax" );
$.ajax({
url: "./index.php",
data: q,
success: function(r){alert(r);},
cache: false,
dataType: "html",
type: "POST"
});
}
// -->
</script>
</head>
<body>
<div>ポストされた値:<?php echo $_POST['p1']; ?></div>
<form id="form2ajax">
<input type="text" name="p1" value="">
<input type="button" onclick="javascript:test();" value="button">
</form>
</body>
</html>