ロックオン開発チームブログ -Lockon Knowledge Repositories-

EUC-JPフォームの文字化け

開発中、文字化けに出くわしました。
以下のようなシンプルなフォーム(POST情報が少ない)でのみ再現します。
<html lang="ja">
<head>
<meta http-equiv=Content-Type content="text/html; charset=EUC-JP">
</head>

<body>

<table>
<form name="form1" action="test.php" method="POST">
<tr>
	<td>文字を入力してください</td>
	<td><input type="text" name="string"></td>
	<td><input type="submit" value="送信"></td>
</tr>
</form>
</table>

<?php
    if(isset($_POST['string'])) {
        print("string is " . $_POST['string']);
    }
?>

</body>
</html>



このフォームに「属性」をいれて送信すると、PHP側の出力で

string is °

と、「属性」をEUC-JPと認識せず文字化けを起こしました。
「属性」をEUC-JP文字コードで調べたところ、

C2 B0 C0 AD

となります。
またSHIFT-JISのコード範囲は、

1バイト目 : 0x81 - 0x9F または 0xE0 - 0xFC
2バイト目 : 0x40 - 0x7E または 0x80 - 0xFC

となっており、2バイト目にSHIFT-JISのコードの条件があてはまっているのがわかります。
これが文字化けを起こしていた原因でした。

そして、対策方法ですが、hiddenを利用します。

<input type="hidden" name="dummy" value="美乳">


valueに入っている「美乳」、これがポイントです。

これも同じように16進数に変換すると、

C8 FE C6 FD

となり、1バイト目、2バイト目共に、SHIFT-JISコードに当てはまらないので、POST時に確実にEUC-JPと認識させ、文字化けを解消できました。

Trackback

このエントリーのトラックバックURL:
http://www.lockon.co.jp/cgi-bin/mt/mt-tb.cgi/16

コメント



Copyright(c) LOCKON CO.,LTD. All Rights Reserved.