カスタムフォームを作れる cforms が人気のプラグインらしい。
確かにDBへデータを保存したりなかなか高機能。
日本語言語ファイルもあるのでかなり便利。
ただ日本語環境だといくつか問題がある。
メールSubjectはかなりの確率で文字化けを起こす。
コードが日本語Subjectを考慮していないのが原因。
送信者名は “ブログタイトル” になるようにプログラムされているが「ブログタイトル」に日本語を使うと文字化けを起こす。
メール本文は WordPress の charset になるので UTF-8 になる。
今はUTF-8でメールを送信してもほとんどのメーラーは問題なく受信できるので、まっイイカとあきらめる。
メールSubjectの文字化けはコードを修正しなければならない。
// lib_aux.php
function encode_header ($str) {
$x = preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches);
if ($x == 0)
return ($str);
return mb_encode_mimeheader($str,'ISO-2022-JP');
} |
// lib_aux.php
function encode_header ($str) {
$x = preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches);
if ($x == 0)
return ($str);
return mb_encode_mimeheader($str,'ISO-2022-JP');
}
関数 encode_header
を修正した。
マルチバイトに対応していない部分を全て削除した。
セキュリティ面にどんな影響が出るのか読めない。
送信者の文字化けは
$frommail = '"'.get_option('blogname').'" <wordpress@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME'])) . '>'; |
$frommail = '"'.get_option('blogname').'" <wordpress@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME'])) . '>';
を下記のように修正した。
$frommail = '"'.mb_encode_mimeheader(get_option('blogname'),'ISO-2022-JP').'" <wordpress@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME'])) . '>'; |
$frommail = '"'.mb_encode_mimeheader(get_option('blogname'),'ISO-2022-JP').'" <wordpress@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME'])) . '>';
ただ、このコードあっちこっちにハードコードされているのでいちいち修正するのが面倒くさい。
せめて関数化してくれていると良かったのに、と思ったりする。
メール本文の文字コード指定もあっちこっちにハードコードされてたりして、イタダケナイと思う。
アップデートも頻繁に行われ、Wordpress のバージョンアップにもいち早く対応しているなど、高機能のプラグインをメンテナンスし続けてくれて感謝!
2バイトな(UTFなのでマルチバイトって言った方がよいのかな?)日本語なんて知らない人が作っているからしょうがないよネな、良くある話。