php
  • html
  • phpmailer
  • 2015-01-06 31 views 6 likes 
    6

    我正在使用PHPMailer,並在for循環中有這行代碼將HTML表格的行添加到電子郵件的正文中。 (PHP的全引擎收錄在這裏:http://pastebin.com/iujp27hU爲什麼PHP將一些尖括號轉換爲PHPMailer中的html實體

    $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 +電子郵件沒有它發生。產品編號對其是否顯示沒有影響。

    如何解決此問題?

    --Additional信息Edit--

    測試一個非常大的訂單的202線在發送這些產生格式錯誤。 這沒有任何屬性,只是純粹的HTML。 PHPMailer在Send()上修改它。

    enter image description here

    +2

    如果您在另一個電子郵件客戶端中打開該電子郵件,該怎麼辦呢? – sjagr

    +1

    @Dagon OP已經觀察到了這一點,並且在問題標題和代碼片段下面都提到了這一點。 – ajp15243

    +0

    嘗試發送相同的電子郵件,但沒有生成html的那一行中的任何變量。看看它是否仍然存在。 '$身體= 「​​」;' 你可能會縮小它什麼在被搞亂它的變量。看看問題是否仍然存在或移動到郵件的其他地方。 – Rimble

    回答

    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中)時發生?

    +0

    有趣的是,我輸出$ order_mail-> Body和$ body到屏幕並且不能重現字符編碼問題,表格創建的很好。但是,當該機構通過PHPMailer Send()函數時,它有時會發生變化,並隨機更改一些< >。我可以重現錯誤,但每次都不是相同的字符,有時一行會有時會有另一行,有時甚至沒有!也許無論服務器在處理什麼,它都會以某種方式不知所措。 –

    +0

    @ S.Mason你有沒有嘗試我的其他建議(沒有空的HTML屬性和雙引號而不是單引號)?我可以嘗試找一些時間來查看Send()函數,並將回報。 – Keelan

    +0

    我添加了測試電子郵件的選擇部分的屏幕截圖。我正在使用我正在使用PHPMailer 5.1(無法升級,因爲5.2出於某種原因不起作用)我認爲問題在於PHPMailer在某些地方插入空格。就像輸入緩衝區已滿,當它啓動另一個輸入緩衝區時,它會在輸入之前添加一個空格。或者想知道PHPMailer使用set_magic_quotes_runtime()函數是否存在問題,這是不正確的。 –

    -1

    不知道這是否會幫助您解決問題,但值得一試,您可以避免將PHP連接成HTML,方法是將變量放在大括號{$rush_part_style}中,然後將其放入HTML中。這樣可以避免關閉並重新打開html。

    +0

    順便說一句,這裏不需要花括號來避免串聯。 「」或「」將回顯變量,因爲使用了雙引號。儘管如此,大括號對數組成員或對象屬性很有用,如「 id} \「>」 – billrichards

    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>後添加換行符對我來說是修復。

    相關問題