PHPでPOSTデータのテキストを改行ごとに区切ってpタグでマークアップし、HTMLメールをつくります。
途中ではまった、preg_splitの文字化けを回避する方法も。
もくじ
php関連記事
PHPのmb_send_mailでメール送信時に、はしご高「髙」やたつさき「﨑」など旧漢字や丸数字の日本語文字化け対策をする
MySQL/MariaDBのデータをPHP側で暗号化・復号する
phpで10進数と16進数、2進数、8進数の変換と0埋め表記
WordPressの条件分岐タグでページを判別する
PHPでpreg_splitの文字化けを回避しながらテキストを改行ごとに区切ってHTMLメールをつくる
WordPressテーマアップロード時に「辿ったリンクは期限が切れています。 もう一度お試しください。」と表示される
PHPで画像アップロード時に比率を保ったまま縮小する
phpで郵便番号を正規表現で3桁・ハイフン・4桁で出力するfunction
phpで電話番号のハイフンを正規表現で出力するfunction
テキストを改行ごとに区切って、pタグで囲むfunction
php
function html_paragraph($str, $xhtml=true){ $arr = preg_split("/\R\R+/u", $str, -1, PREG_SPLIT_NO_EMPTY); $result = ""; foreach($arr as $value){ $value = htmlspecialchars($value, ENT_QUOTES); $result .= '<p>' . nl2br($value, $xhtml) . "</p>\n"; } return $result; }
$str
にテキストを指定すると、改行コードごとに区切って配列に格納されます。
そして、それぞれにpタグで囲みます。
preg_split
の第一引数は、正規表現で改行コードを入れています。
PREG_SPLIT_NO_EMPTYで空の配列をつくらない
php
$arr = preg_split("/\R\R+/u", $str, -1, PREG_SPLIT_NO_EMPTY);
preg_split
のフラグで、PREG_SPLIT_NO_EMPTY
としたとき、配列に格納される文字列が空じゃないものだけ抽出できます。
preg_splitで文字化けを回避する記述
php
$arr = preg_split("/\R\R+/", $str, -1, PREG_SPLIT_NO_EMPTY);
preg_split
に指定する、正規表現パターンの後にu
がないと文字化けが起こることがあります。ハマったパターンでは、「充」の文字が文字化けしました。
正しいfunctionは、一番最初に記載したものなので、それを利用してもらえば大丈夫です。
URLをaタグに置換する
php
$contents = html_paragraph(h($_POST['contents'])); $pattern = '(https?://[-_.!~*\'()a-zA-Z0-9;/?:@&=+$,%#]+)'; $replacement = '<a href="\1">\1</a>'; $contents = mb_ereg_replace($pattern, $replacement, $contents);
正規表現でテキスト内のURLを判別し、aタグでマークアップします。
htmlspecialcharsでデータをエスケープする
php
$contents = h($_POST['contents']);
上のh()
はhtmlspecialcharsでデータをエスケープしています。
詳細は下記でどうぞ!
HTMLメール用のマークアップ
$contents .= ' <style type="text/css"> body { font-family: "メイリオ","BatangChe","DotumChe","GungsuhChe","MingLiU","Courier","Consolas"; font-size: 15px; } </style>';
HTMLメール用のマークアップが終わったので、メールのフォントなどのcssをstyleタグで記述します。
コメント