Ajaxを使用するとき、特に POSTでサーバーへデータを送信する時に、マルチバイト文字の
エンコードが問題となる場合が多い。
もちろんのことサーバー側がどのような文字コードでデータを受け取るかによるが、
通常、Webページからサーバーへデータを送信した場合、そのHTMLファイルの文字コードに
依存するため、UTF-8のHTMLファイルからデータを送信した場合マルチバイト文字は
UTF-8、Shift-JISのHTMLファイルからデータを送信した場合はShift-JISに自動的に
エンコードされデータが送信される。
しかし、AjaxにおいてPOSTでデータを送信する場合では、事前にリクエストする値(マルチバイト文字)
を明示的にエンコードする必要がある。
今回は、いま最もよく使用されている UTF-8 エンコードの方法を紹介します。
それでは下記の簡単なサンプルコードで説明します。
<html>
<head>
<meta http-equiv="Content-Language" content="ja">
<meta http-equiv="Content-Type" content="text/html; charset=Shift-JIS">
<title>UTF-8エンコード</title>
<script language="javascript">
function enc_utf8(){
var val = document.getElementById('fld1').value;
var str = encodeURIComponent(val);
document.getElementById('fld2').innerText = str;
}
</script>
<body>
<h1>文字列をエンコード</h1>
<p><input type="text" id="fld1" size="10" value="">マルチバイト文字を入力して下さい。
<input type="button" value="UTF-8エンコード" onclick="enc_utf8()">
<p>エンコード処理後 <span id="fld2"></span>
</body>
</html>
入力テキストボックスに、マルチバイト文字を入力し「UTF-8エンコード」ボタンを押すと、
JavaScriptの関数:enc_utf8() が実行される。
その enc_utf8関数の中の JavaScriptの関数として用意されている encodeURIComponent(val) という
もので、実際にUTF-8エンコードが行なわれ、UTF-8エンコードされた文字列が返される。
エンコードされた文字列 = encodeURIComponent(入力値);
この encodeURIComponent は、Ajax通信では一般的によく使用されており、
実際にAjaxアプリケーションを作成するとき、Ajaxリクエストを実行する直前に送信データを
encodeURIComponent 関数により、UTF-8にエンコードされ簡単に マルチバイト文字列の
UTF-8エンコードができるのである。