1

Postfix が超長い行smtp_line_length_limit(通常は 998 文字) の後に折り返さないようにするために、私は現在、php の整頓されたライブラリを使用して、HTML メールで長い行を折り返しています (関連する質問を参照)。

$oTidy = new tidy();
$message = $oTidy->repairString($message,
    array("show-errors" => 0, "show-warnings" => false, "force-output" => true, 
    "alt-text" => "Please display images", "bare" => true, "doctype" => "auto", 
    "drop-empty-paras" => false, "fix-bad-comments" => false, "fix-uri" => true, 
    "join-styles" => false, "merge-divs" => true, "merge-spans" => true, 
    "preserve-entities" => true, "wrap" => 68),
    "utf8"
); 

Tidy は、HTML と CSS を有効のままにすることに関して、長い行をラップするのに非常に優れています。
残念ながら、無効な HTML マークアップを修正しようとしたり、HTML タグや Doctype を変更したりするのと同じようなことをします。

ただし、必要なのは行の折り返しだけです-tidyが行う他のことはオーバーヘッドであり、他の何よりも面倒な場合があります。

今、私はPHPMailerwrapText()関数を使用しようとしました。残念ながら、私には役に立たないバグが見つかりました。
PHPMailer はこのソースコードを変換します

<html>
    <body>
        Loremipsumdolorsitametconsetetursadipscing<span style="font-family:'Courier New',sans-serif">lorem</span>
    </body>
</html>

<html>
    <body>
        Loremipsumdolorsitametconsete<span style="font-family:'Courier
        New',sans-serif">lorem</span>
    </body>
</html>

一部のクライアントで、単語 lorem のフォント形式 (Courier New) が壊れています。

今私の質問:

HTML と CSS を損傷することなく HTML 行を安全にラップするにはどうすればよいですか?

Tidyはどのようにそれを行いますか?DOM パーサーを使用する必要がありますか? Tidy ソース コードの php バージョンはありますか (見つけられませんでした)。

4

2 に答える 2

2
  1. を使用してテキストをbase64にエンコードしますbase64_encode()
  2. 適切な MIME ヘッダーを設定する
  3. を使用して、この base64-ed blob を 76 文字幅のチャンクに分割しますchunk_split()
  4. 利益!
于 2013-07-31T15:07:58.060 に答える