2011-06-09 47 views
0

我想從谷歌獲取郵件在imap,我使用imap()函數從PHP IMAP庫,我想對我的郵件內容使用preg_match()調用,但我有一個奇怪的問題,我有好奇的休息線改變了正常的preg_match()。刪除 字符從imap郵件提取

更多細節: 我有我的標記類似的東西:

<TABLE CELLPADDING=5 RULES=GROUPS FRAME=BOX> 

<THEAD> 
<TR> <TH>Résumé points de classement</TH>  <TH>Extérieur</TH>   <TH>Domicile</TH> </TR> 
</THEAD> 

<TBODY> 
<TR> <TD>Équipe</TD>      <TD>Milan</TD>   <TD>Arsenal</TD> </TR> 

<TR> <TD>Performance du match</TD>   <TD>0</TD> <TD>19</TD> </TR> 
<TR> <TD>Étoiles équipe</TD>   <TD>0</TD> <TD>0</TD> </TR> 
<TR> <TD>Points totaux</TD>    <TD>3195</TD>  <TD>3273</TD> </TR> 

<TR> <TD>Niveau actuel</TD>  <TD>22</TD> <TD>22</TD> </TR> 
<TR> <TD>Points pour le prochain niveau</TD> <TD>5</TD> <TD>127</TD> </TR> 
</TBODY> 

</TABLE> 

我運行這段代碼來提取身體例如:

<?php 
// $message is the previous markup. 
$str = substr($message, 321, 10); 
var_dump($str); 
$str = preg_replace("/&#10;/i","",$str); 
var_dump($str); 
?> 

這段代碼的輸出是:

<pre class='xdebug-var-dump' dir='ltr'><small>string</small> <font color='#cc0000'>' 
&#10; 
&#10;&amp;lt;TABLE'</font> <i>(length=13)</i> 
</pre> 
<pre class='xdebug-var-dump' dir='ltr'><small>string</small> <font color='#cc0000'>' 
&#10; 
&#10;&amp;lt;TABLE'</font> <i>(length=13)</i> 
</pre> 

而提取的值是一個空的數組... ...之後furthe r調查我發現通過var_dump()我的源字符串在每行的末尾有 。 我不知道這個HTML代碼是什麼以及如何刪除它。

如果你能微啓我,我應該心存感激;)

有一個愉快的一天!

編輯: 使用str_replace()它工作!實際上\ 是\ n斷線。所以,魔術是:

$overview = imap_body($inbox,$email_number,0); 
$message = utf8_decode(quoted_printable_decode($overview)); 
$message = str_replace("\n", "", $message); 
+0

取出雙引號和替換運行陣列他們用單引號在preg_replace – Ryan 2011-06-10 17:32:53

回答

1

那麼第一件事就是我假設您已經運行imap_mime_header_decode,你有結果。

假設你在UTF8字符集的工作,而不是ISO-8859-1或ISO-8859-15字符集,你可以嘗試

utf8_encode($string); 

我希望這有助於。

編輯 哎呦...刪除或替換字符,你可以使用

preg_replace('/&#10/','<alt>',$string); 

剛剛發生在你替換字符。您可以通過執行

preg_replace('/&#10/','',$string); 

用什麼替代它,你也可以通過的preg_replace像

$string = $myFile; 
$search = array('/&#10/','/sec/'); 
$replace = array('','<alt>'); 
preg_replace($search,$replace,$string); 

This may also be relevant to you.

我希望這有助於

+0

我正在使用: $ message = imap_fetchbody($ inbox,$ email_number,1); $ message = imap_qprint($ message); 要獲取內容,它已被解碼。 – Artusamak 2011-06-09 23:51:57

+0

如果它已經是UTF8 /你的首選字符集,那麼你應該可以繼續使用preg_replace來處理混亂的字符,你能告訴我電子郵件的標題是在電子郵件中聲明的字符集嗎?你也將它插入數據庫?如果是這樣,數據庫使用什麼編碼? – Ryan 2011-06-09 23:54:23

+0

我嘗試了你在編輯中建議的內容,但替換不起作用。 (我沒有從數據庫中獲取數據)。電子郵件的字符集是UTF-8。 – Artusamak 2011-06-10 08:29:12