我尝试在将邮件插入数据库之前删除电子邮件的签名。签名包含在一个特殊的标签xxx中,以帮助剥离。
以下仅适用于签名被压缩而没有空格分布在各行上的情况。
$msgeBody = preg_replace('#(<signature>).*?(</signature>)#', '$1$2', $msgeBody);
我已经尝试过在线找到这些标签之前删除空格的可能性,然后才应用上面的行。但没有成功。怎么做?以下是分布在行上的示例文本: -
<signature><p><span style="font-weight: bold;">Gerald Sugan</span><br>
Travel Consultant<br>
<span style="font-size: 18px; font-family: 'Courier New'; font-weight: bold;">Sugan Enterprises Inc</span></p>
</signature>
php preg_replace regex that matches multiple lines的解决方案不重复。我在这里看不到如何应用这些解决方案。我认为下面找到的解决方案是不同的。
答案 0 :(得分:2)
您可以使用DOMDocument:
$mail= <<<'EOD'
<body>
blah blah blah
<signature><p><span style="font-weight: bold;">Gerald Sugan</span><br>
Travel Consultant<br>
<span style="font-size: 18px; font-family: 'Courier New'; font-weight: bold;">Sugan Enterprises Inc</span></p>
</signature>
blah blah blah
</body>
EOD;
libxml_use_internal_errors(true);
$dom = new DOMDocument;
$dom->loadHTML($mail, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
foreach ($dom->getElementsByTagName('signature') as $node) {
$node->parentNode->removeChild($node);
}
echo $dom->saveHTML();
答案 1 :(得分:1)
这是一个与您的签名匹配的简单正则表达式:<signature>[\S\s]*<\/signature>
\ S :匹配空格,制表符或换行符以外的任何内容 \ s :匹配任何空格,制表符或换行符 *:匹配零个或多个连续字符。
答案 2 :(得分:0)
尝试使用Trim()/ 删除指定空格或字符的函数 /:
答案 3 :(得分:0)
爆炸会将签名与电子邮件正文分开并且只是一小段代码,但您需要删除最后一个遗留标记。
要回答原始查询chop($yourString, ' ' )
,请删除$yourString
内的所有空格参考:http://php.net/manual/en/function.chop.php
您的电子邮件保存在名为$msgeBody
的变量中,因此将其拆分为“签名”并删除其余标记。
$msgeBody = explode("signature", $msgeBody);
$msgeBody = rtrim($msgeBody[0], "<");
在将其放入数据库之前清理$msgeBody
。
使用$msgeBody = explode("signature", $msgeBody);
从第一部分末尾的“签名”中留下第一个<
- 电子邮件的正文 - 位于数组位置$msgeBody[0]
。
str_replace('<','', $msgeBody[0]);
也会移除代码,但如果$msgeBody
中有其他代码,则会将其删除。
rtrim($msgeBody[0], "<");
应该更好地删除它。
substr()
也有可能http://php.net/manual/en/function.substr.php,并会找到第一次出现''
rtrim($msgeBody,'<signature>');
也可能会将其删除,但Mariano对多个签名的警告。未经测试。
strip_tags($msgeBody, '');
将删除所有标签。 (您可以在“''
”中添加要保留的任何标记,例如“<br />
”。