php文字列処理(メール処理)
5581 ワード
今日文書メールの注意機能をすると、システムから送信されたメールがいつも表示されていないことに気づきました.メールの送信方法を呼び出す前に記録されたログは完全です.検索元はメール形式で、メール明細に長さ制限があります.
ps 1:メール文字制限
ps 2:メール本文改行文字規定
(原文リンク):http://hi.baidu.com/zhufangtian/item/ba54cb5f09780413abf6d74b
したがって、メールを送信するときは、メール文字列を改行する必要があります.
php substr()関数で文字列を長さ別に切り替えようと試み始めたが、メール本文にhtmlタグが多く、固定長文字のみを判断した場合、多くのタグの組み合わせを切り替えよう(がtとdの間で改行を切り替えようとした)ので、元のhtmlタグが取り外され、本来の意味が損なわれ、表示異常になった.
その後、codeigniterフレームワークメール送信プラグインをテストし、このような単行超長メールの送信をサポートしていることを発見し、ソースコードを表示します.そのメール本文の処理方法を分析し、
最終処理手順:
1.文字列をすべて小文字に変換
2.戻り改行を
に置き換えます.本プロジェクトのメールはhtml形式の
3.余分なスペースを取り除く
4.aタグの内容を置き換え、タグの内容が長すぎて切断されないようにする
5.wordwrapメソッド文字列の自動改行を処理します.()
実際の項目で改行文字がrでなければならないことを発見した(windowsの場合は実際にテストし、ネット上ではrと言うことが多く、個人的には間違っているような気がする)ので、wordwrapメソッドの置換パラメータを規定しなければならない.
切断後のラベル改行trとspanの間に改行文字があり、スペースがありません.
6.aタグの内容を置換する
ps 1:改造後のメール処理方法
ps 3:codeigniterソース:
ps 1:メール文字制限
2 。 (MUST) 998 , (SHOULD) 78 ,
CRLF。
ps 2:メール本文改行文字規定
US-ASCII 。 2 , :
-CR,LF CRLF, 。
- (MUST) 998 , (SHOULD) 78 , CRLF。
(原文リンク):http://hi.baidu.com/zhufangtian/item/ba54cb5f09780413abf6d74b
したがって、メールを送信するときは、メール文字列を改行する必要があります.
php substr()関数で文字列を長さ別に切り替えようと試み始めたが、メール本文にhtmlタグが多く、固定長文字のみを判断した場合、多くのタグの組み合わせを切り替えよう(がtとdの間で改行を切り替えようとした)ので、元のhtmlタグが取り外され、本来の意味が損なわれ、表示異常になった.
その後、codeigniterフレームワークメール送信プラグインをテストし、このような単行超長メールの送信をサポートしていることを発見し、ソースコードを表示します.そのメール本文の処理方法を分析し、
最終処理手順:
1.文字列をすべて小文字に変換
2.戻り改行を
に置き換えます.本プロジェクトのメールはhtml形式の
3.余分なスペースを取り除く
4.aタグの内容を置き換え、タグの内容が長すぎて切断されないようにする
5.wordwrapメソッド文字列の自動改行を処理します.()
実際の項目で改行文字がrでなければならないことを発見した(windowsの場合は実際にテストし、ネット上ではrと言うことが多く、個人的には間違っているような気がする)ので、wordwrapメソッドの置換パラメータを規定しなければならない.
切断後のラベル改行trとspanの間に改行文字があり、スペースがありません.
<tr
span='3'>
6.aタグの内容を置換する
ps 1:改造後のメール処理方法
//
function __mailreplace($content, $type) {
// ( , wordwrap )
if (strtolower ( $type ) == "html") {
$content = ltrim ( $content );
$content = str_replace ( array ('
', '\r
' ), "<br/> ", $content );
$content = str_replace ( array (chr ( 13 ), chr ( 13 ) . chr ( 10 ) ), "<br/> ", $content );
//
$content = str_replace ( " ", " ", $content );
// ,
$content = str_replace ( "</tr>", "</tr> ", $content );
} else {
$content = str_replace ( array ("<br>", "<br/>" ), "\r
", $content );
$content = str_replace ( " ", " ", $content );
}
//
$content = preg_replace ( "| +|", " ", $content );
// a ( )
$unwrap = array ();
if (preg_match_all ( '|(<a.*>.*</a>)|U', $content, $matches )) {
for($i = 0; $i < count ( $matches ['0'] ); $i ++) {
$unwrap [] = $matches ['1'] [$i];
$content = str_replace ( $matches ['1'] [$i], "{{a-link" . $i . "}}", $content );
}
}
// ( , html )
$content = wordwrap ( $content, 75, "\r
", FALSE );
// a
if (count ( $unwrap ) > 0) {
foreach ( $unwrap as $key => $val ) {
$content = str_replace ( "{{a-link" . $key . "}}", $val, $content );
}
}
return $content;
}
ps 3:codeigniterソース:
public function word_wrap($str, $charlim = '') {
// Se the character limit
if ($charlim == '') {
$charlim = ($this->wrapchars == "") ? "76" : $this->wrapchars;
}
// Reduce multiple spaces
$str = preg_replace ( "| +|", " ", $str );
// Standardize newlines
if (strpos ( $str, "\r" ) !== FALSE) {
$str = str_replace ( array ("\r
", "\r" ), "
", $str );
}
// If the current word is surrounded by {unwrap} tags we'll
// strip the entire chunk and replace it with a marker. ( a )
$unwrap = array ();
if (preg_match_all ( "|(\{unwrap\}.+?\{/unwrap\})|s", $str, $matches )) {
for($i = 0; $i < count ( $matches ['0'] ); $i ++) {
$unwrap [] = $matches ['1'] [$i];
$str = str_replace ( $matches ['1'] [$i], "{{unwrapped" . $i . "}}", $str );
}
}
// Use PHP's native public function to do the initial wordwrap.
// We set the cut flag to FALSE so that any individual words that are
// too long get left alone. In the next step we'll deal with them.
//
$str = wordwrap ( $str, $charlim, "
", FALSE );
// Split the string into individual lines of text and cycle through them
$output = "";
foreach ( explode ( "
", $str ) as $line ) {
// Is the line within the allowed character count?
// If so we'll join it to the output and continue
if (strlen ( $line ) <= $charlim) {
$output .= $line . $this->newline;
continue;
}
$temp = '';
while ( (strlen ( $line )) > $charlim ) {
// If the over-length word is a URL we won't wrap it
if (preg_match ( "!\[url.+\]|://|wwww.!", $line )) {
break;
}
// Trim the word down
$temp .= substr ( $line, 0, $charlim - 1 );
$line = substr ( $line, $charlim - 1 );
}
// If $temp contains data it means we had to split up an over-length
// word into smaller chunks so we'll add it back to our current line
if ($temp != '') {
$output .= $temp . $this->newline . $line;
} else {
$output .= $line;
}
$output .= $this->newline;
}
// Put our markers back
//
if (count ( $unwrap ) > 0) {
foreach ( $unwrap as $key => $val ) {
$output = str_replace ( "{{unwrapped" . $key . "}}", $val, $output );
}
}
return $output;
}