0

具体的には、改行情報を保持したいと思います。これが私のコードです:

$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つの巨大な実行です。ここで何が間違っていますか?

4

0 に答える 0