2012-03-25 116 views
0

我有一個將消息正文寫入數據庫的RoundCube插件,之後我需要將數據解析到另一個表中。通過使用RoundCube中的某些功能,我可以刪除所有html標記,並且</td>被替換爲'\ n',</tr>替換爲'\ n \ n'。這使我的數據解析非常簡單而且強大。僅存在一個缺點,在端的HTML數據被分成固定線與=,例如:從html中刪除`= n`

<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> 

+1

搜索'decode quoted-printable',這就是你想要做的。除了刪除等號和換行符之外,還有更多。 – dldnh 2012-03-25 12:57:41

+0

如果你str_replace('=','',$ msg_body);在str_replace('= \ n','',$ msg_body)之前; 通常不會有更多的= \ n來檢測... – Kharaone 2012-03-25 13:02:11

+0

我一一使用它們,而不是全部3在一次去,但你是正確的,一個必須小心,把不必要的代碼行。 – 2012-03-25 15:10:14

回答

-1

取決於您所使用的新換行符可以在系統上:

\n 
\r 
\r\n 

因此,檢查這些輩

您還可以使用正則表達式,如果你知道有隻選擇標記的數量有問題:

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

在你的情況下,應該改造</td= ...><td>

0

對於具有適當地包括轉義字符,你必須在PHP中使用雙引號("):

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

否則,PHP會查找字符串=\n

4

=XY表示法是(oldschool,但仍然使用!)引用可打印的編碼的一部分,表示7位ASC代碼集中的8位ASCII字符串。所有大於127的字符都以=F3的形式進行編碼,這是該字符的十六進制表示形式。

例如,在您的HTML標記中,如果仔細查看,=的編碼爲=3D

更多的Wikipedia on quoted-printable

解碼消息恢復正常HTML,你必須申請quoted_printable_decode()字符串。

$msg_body = quoted_printable_decode($msg_body); 
+0

這一行代碼解決了我所有的痛苦!感謝這一點,我認爲這是爲了確保大多數電子郵件讀者正確閱讀電子郵件,他們仍然使用它,因爲他們的網站使用最新的技術。 – 2012-03-25 15:05:15

+0

@JohanMarais多數民衆贊成。別客氣。如果它對你有幫助,請接受它作爲正確的答案。謝謝。 http://stackoverflow.com/faq#howtoask – Kaii 2012-03-25 15:12:44