删除
 imap邮件摘录中的char

问题描述

我正在尝试从Google的imap中获取邮件,我正在使用PHP IMAP库中的imap()函数,我想对邮件内容使用preg_match()调用,但是我遇到了一个奇怪的问题,我很好奇换行会改变普通的preg_match()。 更多细节: 我在标记中有这样的内容
<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>
提取的值是一个空数组...经过进一步调查,我通过源字符串的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);
    

解决方法

        好吧,第一件事就是我假设您已经运行了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);
这也可能与您有关。 我希望这有帮助