0

メッセージ本文をデータベースに書き込む RoundCube プラグインがあり、その後、データを別のテーブルに解析する必要があります。RoundCube で特定の関数を使用することにより、すべての html タグを削除することができ、a</td>は '\n' に</tr>置き換えられ、'\n\n' に置き換えられます。これにより、データの解析が非常に簡単かつ堅牢になります。=欠点が 1 つだけあります。html データは、末尾に がある修正行に分割されます。たとえば、次のようになります。

<td valign=3D"bottom" style=3D"color:#444444;padding:5px 10px 5=
px 0px;font-size:12px;border-bottom:1px solid #eeeeee;"><b>Discount</b></td=
><td valign=3D"bottom" align=3D"right" style=3D"color:#444444;padding:5px 0=
px 5px 0px;font-size:12px;border-bottom:1px solid #eeeeee;text-align:right;=
"><b>Price after discount</b></td>

現在、 は</td=認識されていないため、割引 \n 割引後の価格\n ではなく、割引後の割引価格\ nのように割引後の価格に割引が結合されます。これはコードの至るところにあり、実際に深刻な問題を引き起こしています。

= を削除して、次のようなもので中断しようとしました。

$msg_body = str_replace('=', '', $msg_body);
$msg_body = str_replace('=\n', '', $msg_body);
$msg_body = str_replace('= ', '', $msg_body);

本当の成功はありません。改行なのか段落の改行なのか、= 記号の後に来る改行の種類がわからず、見つけようとしましたが、無駄に、RoundCube のコードを見てもわかりませんでした。HTMLをエコーアウトしても、何も明らかになりませんでした。

これを一般的な php と html の質問としてここに投稿します。これは、誰かがこれらの = 記号と神秘的な (私にとって) ブレークを単純に削除するのを手伝ってくれることを願っています。

</td=
>

になる

</td>

など

4

3 に答える 3

4

=XY表記法は、7 ビット ASC コードセットで 8 ビット ASCII 文字列を表す (古い学校ですが、まだ使用されています!) quoted-printable エンコーディングの一部です。127 を超えるすべての文字=F3は、文字の 16 進表現である の形式でエンコードされます。

たとえば、HTML タグでは、を詳しく見ているかのように=エンコードされます。=3D

引用された印刷可能なウィキペディアで詳細を読む

メッセージをデコードして通常の HTML に戻すにquoted_printable_decode()は、文字列に適用する必要があります。

$msg_body = quoted_printable_decode($msg_body);
于 2012-03-25T13:04:44.230 に答える
0

"エスケープ文字を適切に含めるには、PHP で二重引用符 ( ) を使用する必要があります。

$msg_body = str_replace("=\n", '', $msg_body);

それ以外の場合、PHP は string を探します=\n

于 2012-03-25T12:57:06.157 に答える
-1

使用しているシステムに応じて、新しい改行は次のようになります。

\n
\r
\r\n

だからそれらもチェックしてください

問題のある選択された数のマークアップしかないことがわかっている場合は、regexp を使用することもできます。

$msg_body = preg_replace('/(\w+)=[\s\r\n]*/', '$1', $msg_body);

あなたの場合、それはに変換する必要があり</td= ...>ます<td>

于 2012-03-25T12:55:58.307 に答える