auのガラケーだけ、プログラムが動かないとかいう相談がきた。
もういい加減文字コードで四苦八苦したくないというのが開発者の本音かも…
知り合いから「auのガラケーだけプログラムが動かない」って相談がきました。
auだけ動かない…???(メ・ん・)?
よくよく話を聞いてみると「MP Form Mail」とかいうCGI版の有料スクリプトを使っているらしい。
調べてみたら、結構高いshareware。
つか、いまどきFORMのメール送信プログラムくらいで金を払うなって。
それはさておき。
どうしてauのガラケーだけプログラムが動かない(正確には、プログラムは動いていてエラーが出る)のか調べてみると、どうやら文字コードが原因らしいということが分かった。
うーん…。
結局、めんどくさいので(つか、perlとかわかんないし)PHPにてプログラムを書き直すことに…。
もうないとは思うけど、auのガラケーサイト用にメモっておく。
//取得データのエンコードを変える。
foreach ($_POST as $key => $val){
$val = mb_convert_encoding($val, 'UTF-8', 'UTF-8,SJIS,EUC-JP');
$val = mb_convert_kana($val, "KV");
$data[$key] = $val;
}
とりあえず「mb_convert_encoding()」で文字のエンコードをUTF-8にして、「mb_convert_kana()」で半角カナを全角に。
「mb_convert_kana()」の第2引数のパラメータ表は以下。
r 「全角」英字を「半角」に変換します。
R 「半角」英字を「全角」に変換します。
n 「全角」数字を「半角」に変換します。
N 「半角」数字を「全角」に変換します。
a 「全角」英数字を「半角」に変換します。
A 「半角」英数字を「全角」に変換します ("a", "A" オプションに含まれる文字は、U+0022, U+0027, U+005C, U+007Eを除く U+0021 - U+007E の範囲)。
s 「全角」スペースを「半角」に変換します(U+3000 -> U+0020)。
S 「半角」スペースを「全角」に変換します(U+0020 -> U+3000)。
k 「全角カタカナ」を「半角カタカナ」に変換します。
K 「半角カタカナ」を「全角カタカナ」に変換します。
h 「全角ひらがな」を「半角カタカナ」に変換します。
H 「半角カタカナ」を「全角ひらがな」に変換します。
c 「全角カタカナ」を「全角ひらがな」に変換します。
C 「全角ひらがな」を「全角カタカナ」に変換します。
V 濁点付きの文字を一文字に変換します。"K", "H" と共に使用。
今回は"KV"、つまり
・「半角カタカナ」を「全角カタカナ」に変換します。
・濁点付きの文字を一文字に変換します。"K", "H" と共に使用。
という操作をしただけ。
あとは…
mb_language("ja");
mb_internal_encoding("UTF-8");
$subject = '件名';
$mailbody = <<<_EOD_
ヒアドキュメントでメール本文を作成
_EOD_;
mb_send_mail("メールアドレス",$subject,$mailbody);
header("Location: ページ移動先");
とかやっちゃえば、おk。
ホントは、入力項目チェックとかしなきゃいけないんだけど(つか、htmlspecialchars()もやってないし)、それを言ったら
「時間がないんで、これで。」
となりました。