2012-04-26

charaset=EUC-JP

サンプルコードを張っておくよ。
テキストエディタでEUC-JPで保存してね。

サンプルを確認したサーバー環境:
・PHP Version 5.3.2-1ubuntu4.14

サンプルを確認したOSとブラウザ:
・XP で IE8、Google Chrome
・Ubuntu 10.04 で Google Chrome

<?
$chr = "";
$hex = "";

if (isset($_POST["check_char"])) {
    //  ポストされた文字を16進に変換
    $chr = $_POST["check_char"];
    $arr = unpack("C*", $chr);
    $hex = "";
    for ($j = 1; $j <= count($arr); $j++) {
        $hex.= base_convert($arr[$j], 10, 16);
    }

}
?>
<html>
<head>
<meta http-equiv="content-language" content="ja" />
<meta http-equiv="content-type" content="text/html; charset=EUC-JP" />
<title>EUC-JP</title>
</head>
<body>
<form action="" method="post" accept-charset="EUC-JP">
<p>チェックする文字:<input type="text" name="check_char" value="<?=$chr?>" /></p>
<p>ポストされた文字:<?=$hex?></p>
<p><input type="submit" value="CHECK" /></p>
</form>
</body>
</html>




「チェックする文字」に「№」と入力した結果は


【XP の結果】

ポストされた文字:ade2




【Ubuntu 10.04 の結果】


ポストされた文字:ade2



おや?XPなら「まー、そうかなー」なんだけど、Ubuntuさんまで2バイト文字でポストしちゃってるのね。



ちなみに、PHPで SJIS-win な文字(2バイト文字)を EUC-JP へ変換すると、3バイト文字に変換される。

下のサンプルを Shift_JIS(CP932)で保存して実行してみて。

<?
$chr = "";    
$hex = "";

$chr = mb_convert_encoding("№", "EUC-JP", "SJIS-win");
$arr = unpack("C*", $chr);
$hex = "";
for ($j = 1; $j <= count($arr); $j++) {
    $hex.= base_convert($arr[$j], 10, 16);  //  8fa2f1 に変換される。
}
?>
<html>
<head>
<meta http-equiv="content-language" content="ja" />
<meta http-equiv="content-type" content="text/html; charset=Shift_JIS" />
<title>EUC-JP</title>
</head>
<body>
<p>変換された文字:<?=$hex?></p>
</body>
</html>



理由がわからん。


EUC-JP って言ってるのにさ、2バイト文字として送信されるのは何故?

2012-04-24

Internet Explorer は 3バイトEUC-JP を表示できない

Firefox も Google Chrome も EUC-JP の3バイト文字を表示できるのに対し、

Internet Explorer は表示できない。

Internet Explorer で EUC系の文字をちゃんと表示しようと思ったら、

PHPだと、CP51932でエンコーディングしてあげる。

//  CP932な文字をCP51932へエンコード。"伹" は 0xF9B2
$ecuchar = mb_convert_encoding("伹", "CP51932", "SJIS-win");


//  CP932な文字をEUC-JP、eucJP-winへエンコードすると、
//  3バイト文字にエンコードされる文字があるので注意。
//  CP932な文字をEUC-JPへエンコード。"伹" は 0x8FB0E3
$ecuchar = mb_convert_encoding("伹", "EUC-JP", "SJIS-win");

//  CP932な文字をeucJP-winへエンコード。"伹" は 0x8FB0E3
$ecuchar = mb_convert_encoding("伹", "eucJP-win", "SJIS-win");





2012/05/15 追記
ポストするときは、2バイト文字でポストするのにね。 charset=EUC-JP

.htaccessで403を404で返す

久しぶりにリライトルールを書いたよ。 ドキュメントルートに.htaccessを置く場合の記述↓ # 403.html は実体がなくてよい。この設定をすることで、あっても使われなくなる。 ErrorDocument 403 /403.html # 独自の404ページをドキュメ...