- ベストアンサー
PHPでカートを使ってメールを送信できる方法
- PHPでカートを使ってメールを送信する方法について調査しています。特に、日本語での入力に関して問題が発生しています。
- 現在参考にしているサイトでは、日本語の名前と住所を入力しても表示されない問題があります。
- また、UTF-8ではなくEUC-JPで文字のエンコードを行いたいという要望があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
default_charsetは何になっていますか?もしスクリプト(というかPOSTしてくるhtml)の文字セットと異なっていれば、htmlspecialcharsの第3引数で正しい文字セットを指定してください。htmlspecialcharsは文字セットが誤っていると空白を返しますので・・・ http://php.net/manual/ja/function.htmlspecialchars.php 当然ですが、html(フォーム)をEUC-JPで作るなら、phpスクリプトもEUC-JPにしてhtmlspecialcharsの第3引数でもeuc-jpを指定してください。 #ただ今どきeuc-jpを使うメリットはありませんけどね。今のwebでは #utf-8一択です(utf-8前提のものがあまりに多い)。
その他の回答 (1)
- shimix
- ベストアンサー率54% (865/1590)
提示されたサイトの内容はあまりに古すぎます。 purchase.phpでescapeshellcmdなんか使っていますが、おそらくはこれが原因です。この関数は全部取っ払ってください。 13:$name = escapeshellcmd($_POST["name"]); 14:$name = htmlspecialchars($name); 15:$address = escapeshellcmd($_POST["address"]); 16:$address = htmlspecialchars($address); ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ $name = filter_input(INPUT_POST, 'name'); $address = filter_input(INPUT_POST, 'address'); (html用の)エスケープは表示するときに行います。 66:<td width=300><?php print $name ?></td> ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ <td width=300><?= htmlspecialchars($name, ENT_QUOTES); ?></td> 69:<td><?php print $address ?></td> ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ <td><?= htmlspecialchars($address, ENT_QUOTES); ?></td> エスケープの基本は「必要なときに必要なエスケープを行う」ことです。オーダーファイルに書き出している内容をブラウザに表示する処理を追加するときには、そのときにhtmlspecialcharsしてください(エスケープしてから書き出す必要はない)。 メール送信を追加したければ、ファイルに書き出している内容をそのままメール本文にしてmb_send_mailで送信すればいいと思います(エスケープしてしまうと、このときに困りますよね)。
補足
アドバイスありがとうございます。 ですが、purchase.phpをご指示のとおり変更しましたが、真っ白になってしまい動作しません。 何かが不足しているのでしょうか?もしくは下記を変更しただけでは足りないのでしょうか? よろしくお願いします。 13:$name = escapeshellcmd($_POST["name"]); 14:$name = htmlspecialchars($name); 15:$address = escapeshellcmd($_POST["address"]); 16:$address = htmlspecialchars($address); ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ $name = filter_input(INPUT_POST, 'name'); $address = filter_input(INPUT_POST, 'address'); 66:<td width=300><?php print $name ?></td> ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ <td width=300><?= htmlspecialchars($name, ENT_QUOTES); ?></td> 69:<td><?php print $address ?></td> ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ <td><?= htmlspecialchars($address, ENT_QUOTES); ?></td>
補足
またまたありがとうございます。 「htmlspecialcharsの第3引数で正しい文字セットを指定してください。」というのを 下記を追加してみましたがEUC-JPでもutf-8に変えても結果は同じでした。 <?php /** * 特殊文字を HTML エンティティに変換する * * @param $string * @return string */ function h($string) { return htmlspecialchars($string, ENT_QUOTES, 'euc-jp'); } ?> default_charsetの見方が不明でしたのですみません。 度々ですが、よろしくお願いします。