如何编辑我的函数来摆脱
" B = utf - 8 ? ?0JfQsNC60LDQtyDQstGL0L/QuNGB0LrQuCBkb2xzbm93ICIgM9C00LDQtNCw ?= "。"
在邮件主题?
这个函数(EncodeHeader)是邮件消息的编码头,需要以某种方式进行更正。代码如下所示:
public function EncodeHeader($str, $position = 'text') {
$x = 0;
switch (strtolower($position)) {
case 'phrase':
if (!preg_match('/[200-377]/', $str)) {
// Can't use addslashes as we don't know what value has magic_quotes_sybase
$encoded = addcslashes($str, " ..37177\"");
if (($str == $encoded) && !preg_match('/[^A-Za-z0-9!#$%&'*+/=?^_`{|}~ -]/', $str)) {
return ($encoded);
} else {
return (""$encoded"");
}
}
$x = preg_match_all('/[^ 40 41 43-133135-176]/', $str, $matches);
break;
case 'comment':
$x = preg_match_all('/[()"]/', $str, $matches);
// Fall-through
case 'text':
default:
$x += preg_match_all('/[ 00- 10 13 14 16- 37177-377]/', $str, $matches);
break;
}
if ($x == 0) {
return ($str);
}
$maxlen = 75 - 7 - strlen($this->CharSet);
// Try to select the encoding which should produce the shortest output
if (strlen($str)/3 < $x) {
$encoding = 'B';
if (function_exists('mb_strlen') && $this->HasMultiBytes($str)) {
// Use a custom function which correctly encodes and wraps long
// multibyte strings without breaking lines within a character
$encoded = $this->Base64EncodeWrapMB($str);
} else {
$encoded = base64_encode($str);
$maxlen -= $maxlen % 4;
$encoded = trim(chunk_split($encoded, $maxlen, "n"));
}
} else {
$encoding = 'Q';
$encoded = $this->EncodeQ($str, $position);
$encoded = $this->WrapText($encoded, $maxlen, true);
$encoded = str_replace('='.$this->LE, "n", trim($encoded));
}
$encoded = preg_replace('/^(.*)$/m', " =?".$this->CharSet."?$encoding?\1?=", $encoded);
$encoded = trim(str_replace("n", $this->LE, $encoded));
return $encoded;
}
我听说必须编码的字符不能放在引号里。
这个东西工作得很好,像这样的消息"这是新的工作主题",但这不是"рабочий инструмент"崩溃。
http://swiftmailer.org/试试这个会对你有帮助。它处理所有的编码