为什么PHP将一些尖括号转换为PHPMailer中的html实体

时间:2015-01-06 21:09:43

标签: php html phpmailer

我正在使用PHPMailer并在for循环中使用这行代码将HTML表格的行添加到电子邮件正文中。 (php的完整pastebin在这里:http://pastebin.com/iujp27hU

$body .= "<tr><td style='". $rush_part_style . "'>" . $row[0]
     . "</td> <td align='center' style='" . $rush_part_style . "'>" . $quantity_to_order
     . "</td> <td>" . $row[2] . "</td></tr>";

电子邮件通常会很好,但每隔一段时间,td标签的一个有角度的括号就会被编码到其HTML实体中。

enter image description here

当我在Outlook中查看源代码时,它的外观如下:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">h3, p, table td {font-family:arial;}</style>
<table><tr><td><u>SD Part Number</u></td><td><u>Quantity</u></td><td><u>UOM</u>/td></tr>    
              - - some rows removed for brevity - -    
<tr><td style="">P1400642-00048-C</td><td align="center" style="">26</td><td>EA</td></tr>
<tr><td style="">P1400642-00046-C</td>&lt; td align='center' style=''&gt;20</td>    <td>EA</td></tr>

<tr><td style="">P1400642-00106-C</td><td align="center" style="">25</td><td>EA</td></tr>
<tr><td style="">P1400642-00036-C</td><td align="center" style="">67</td><td>EA</td></tr>
...

我不明白为什么它会将< >中的一个随机编码到其角色实体中。 这个问题以前发生过,但我可以发送100多封电子邮件而不会发生。部件号与是否出现无关。

我该如何解决这个问题?

- 其他信息编辑 -

测试202行的大量订单会在发送时产生这些格式错误。 这根本没有属性,只有纯HTML。 PHPMailer在Send()上对其进行了修改。

enter image description here

3 个答案:

答案 0 :(得分:1)

尝试在表格行的末尾输出换行符\r\n

$body    .= "<tr><td style='". $rush_part_style . "'>" . $row[0] . "</td> <td align='center' style='" . $rush_part_style . "'>" . $quantity_to_order . "</td> <td>" . $row[2] . "</td></tr>\r\n";

我有一个类似的问题,并且在检查html电子邮件的来源时,似乎有些任意插入换行符。关闭</tr>后添加换行是我的修复。

答案 1 :(得分:0)

输出有&lt; td,而PHP有<td。这很奇怪,因为输出突然间没有任何空间。

要解决问题,您可以在运行脚本时将$body$order_mail->Body输出到屏幕或文件中。查看转发HTML的引入点。如果这不能提供更多信息,请尝试不使用PHP变量,并自己填写一些随机内容。

其他想法:

  • PHPMailer可能存在属性为空(style='')的问题 - 您可以尝试重写代码,以便省略空属性(或者通过添加一些虚拟文本使属性永远不会为空,例如,风格:text-align:left;)。
  • 在HTML中尝试使用双引号("而不是'),PHPMailer可能会遇到问题。

通常在调试时:尽可能地分割代码并输出调试信息,以确定问题的确切位置。是在构建HTML,还是PHPMailer在您将其加载到$order_mail->Body时完成的?或者当你调用Send()时会发生这种情况(在这种情况下你不能用PHP发现它)?

答案 2 :(得分:-1)

不确定这是否会对您的问题有所帮助,但值得一试,您可以通过将变量放在大括号{$rush_part_style}中并将其放在HTML中来避免将PHP连接到HTML。这样可以避免关闭和重新打开html。