具体的には、改行情報を保持したいと思います。これが私のコードです:
$body = imap_fetchbody($stream, $emailId, 1.2);
if (!strlen($body) > 0) {
$body = imap_fetchbody($stream, $emailId, 1.1);
}
if (!strlen($body) > 0) {
$body = imap_fetchbody($stream, $emailId, 1);
}
$structure = imap_fetchstructure($stream, $emailId);
if ($structure->encoding == 3) {
$body = base64_decode($body);
} else if ($structure->encoding == 4) {
$body = imap_qprint($body);
} else if ($structure->encoding == 0) {
$body = $this->decode7Bit($body);
}
private function decode7Bit($text)
{
// If there are no spaces on the first line, assume that the body is
// actually base64-encoded, and decode it.
$lines = explode("\r\n", $text);
$first_line_words = explode(' ', $lines[0]);
if ($first_line_words[0] == $lines[0]) {
$text = base64_decode($text);
}
// Manually convert common encoded characters into their UTF-8 equivalents.
$characters = array(
'=20' => ' ', // space.
'=E2=80=99' => "'", // single quote.
'=0A' => "\r\n", // line break.
'=A0' => ' ', // non-breaking space.
'=C2=A0' => ' ', // non-breaking space.
"=\r\n" => '', // joined line.
'=E2=80=A6' => '…', // ellipsis.
'=E2=80=A2' => '•', // bullet.
);
// Loop through the encoded characters and replace any that are found.
foreach ($characters as $key => $value) {
$text = str_replace($key, $value, $text);
}
return $text;
}
また、本文テキストをデータベースに保存しています。phpMyAdmin を介して DB の本文を見ると、スタイリングがあります。目に見えるタグではありませんが、テキストは実際には段落に分割されています。ただし、本文テキストをダンプするか、HTML にエコーするたびに、スタイルがまったく設定されていません。それはすべて、オンラインで実行される1つの巨大な実行です。ここで何が間違っていますか?