• 締切済み

機種依存文字が?になる

HTML_QuickFormを利用してフォーム送信しているのですが 受信したメールを見ると特定の文字が?になってしまい 文字化けをしてしまいます。 具体的にはメールで確認した際に<input type="text" ・・・>に 入力した半角カタカナと機種依存文字が?に変わっておりました。 php,tplファイルは全てutf-8で保存されphpのソースは以下のようになっております。 header('Content-Type: text/html; charset=utf-8'); mb_language('Japanese'); mb_http_input('UTF-8'); mb_http_output('UTF-8'); mb_internal_encoding('UTF-8'); require_once 'HTML/QuickForm.php'; require_once 'HTML/QuickForm/Renderer/ArraySmarty.php'; require_once 'Smarty/Smarty.class.php'; $to = 'mail@ad.com'; $form = new HTML_QuickForm('inq', 'post'); $form->addElement('text', 'name', '名前', array('class' => text)); $form->addElement('text', 'ad', '住所', array('class' => text)); $form->addElement('textarea', 'msg', 'コメント', array('rows' => 8, 'cols' => 30)); $value = $form->getSubmitValues(); if (isset($value['accept'])) { $subject = '連絡'; $message = <<<EOD 【名前】 {$value['name']} 【住所】 {$value['ad']} 【メッセージ】 {$value['msg']} 【メッセージ】 {$value['msg']} EOD; mb_send_mail($to, $subject, $message, "From: {$value['連絡']}"); $form->freeze(); ~略~ 半角カタカナの件は $message = mb_convert_kana ($message, 'K'); とし解決したのですが機種依存文字の解決策が見つからず自分なりに なんとか調べてみたところ下記のurlがみつかりました。 http://shimax.cocolog-nifty.com/search/2007/12/phpeucjputf8_f714.html utf-8では機種依存文字が?になるのは当たり前のことなのですね。 これを応用しなんとかできるかと思い下記のようにしてみたのですが 結果は同じでした・・・ $message = mb_convert_encoding(mb_convert_encoding($message,"sjis-win","UTF-8"),"UTF-8","sjis-win"); どのようにすれば解決できるものなのでしょうか? 宜しくお願い致します。

みんなの回答

回答No.1

機種依存文字の扱いは、サービスによって変えてるんじゃないですかね。 対処は 削除する 置換する 無視する の3つだと思います。 削除する場合は文字コード範囲を全て削除すればよろしいかと思います。 置換する場合は、変換テーブルを用意しておくことになると思います。 ねこすけのPHPさんとこに良さげな例があります。 http://php.nekosuke.com/000056.htm

noname#65793
質問者

補足

お返事ありがとうございます。 できれば変換する方法で対処したいと思い参照urlを convert.phpとしてアップしフォームのphpに require_once 'convert.php'; で読み込みしmb_send_mailの前に実行するために下記のように replaceText($str); としてみたのですが変換されませんでした。 知識がないので方法が間違っていると思うのですが 具体的にどのような方法で行うものなのか教えて頂けないでしょうか? 宜しくお願い致します。

関連するQ&A