问题描述
我正在尝试从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(\"/ /i\",\"\",$str);
var_dump($str);
?>
此代码的输出是:
<pre class=\'xdebug-var-dump\' dir=\'ltr\'><small>string</small> <font color=\'#cc0000\'>\'
&lt;TABLE\'</font> <i>(length=13)</i>
</pre>
<pre class=\'xdebug-var-dump\' dir=\'ltr\'><small>string</small> <font color=\'#cc0000\'>\'
&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(\'/
/\',\'<alt>\',$string);
只需将替代角色放在哪里。您可以一无所获
preg_replace(\'/
/\',\'\',$string);
您也可以通过preg_replace运行数组,例如
$string = $myFile;
$search = array(\'/
/\',\'/sec/\');
$replace = array(\'\',\'<alt>\');
preg_replace($search,$replace,$string);
这也可能与您有关。
我希望这有帮助