2015-01-06 12 views
6

में HTML इकाइयों में क्यों परिवर्तित करता है मैं PHPMailer का उपयोग कर रहा हूं और एक ईमेल के शरीर में HTML तालिका की रेखा जोड़ने के लिए लूप के अंदर कोड की यह पंक्ति है। (Php से भरा pastebin यहाँ है: http://pastebin.com/iujp27hU)PHP कुछ PHP ब्रैकेट को PHPMailer

$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 इकाई को एन्कोड किया गया है।

<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> 
... 

मैं क्यों यह बेतरतीब ढंग से उन < उनके चरित्र संस्थाओं के लिए > में से एक को कूटबद्ध नहीं मिलता:

enter image description here

जब मैं Outlook में स्रोत देखें, यहाँ यह क्या लग रहा है की तरह है। यह समस्या पहले हुई है लेकिन मैं बिना 100+ ईमेल भेज सकता हूं। भाग संख्या का कोई असर नहीं पड़ता है कि यह प्रतीत होता है या नहीं।

मैं इसका निवारण कैसे कर सकता हूं?

--Additional जानकारी Edit--

परीक्षण 202 लाइनों की एक बहुत बड़ी आदेश भेजने पर इन प्रारूपण त्रुटियाँ पैदा करता है। यह बिल्कुल कोई विशेषता नहीं है, केवल शुद्ध HTML। PHPMailer इसे Send() पर उलझाता है।

enter image description here

+2

यदि आप किसी अन्य ईमेल क्लाइंट में ईमेल खोलते हैं, तो क्या यह भी होता है? – sjagr

+1

@ डैगन ओपी ने पहले ही यह देखा है, और प्रश्न शीर्षक में और कोड स्निपेट के नीचे जितना कहा है। – ajp15243

+0

उसी ईमेल को भेजने का प्रयास करें लेकिन जेनरेट किए गए HTML की उस पंक्ति में किसी भी चर के बिना। देखें कि यह अभी भी होता है या नहीं। '$ शरीर =" ";।' आप यह क्या चर है कि यह खिलवाड़ अप में है करने के लिए नीचे संकीर्ण हो सकता है। देखें कि समस्या मेल में कहीं और बनी हुई है या नहीं। – Rimble

उत्तर

0

उत्पादन &lt; td जबकि अपने PHP <td है है। यह बहुत अजीब है, क्योंकि आउटपुट अचानक अचानक कुछ भी नहीं है।

समस्या निवारण के लिए आप स्क्रीन पर $body और $order_mail->Body या स्क्रिप्ट चलाने पर फ़ाइल आउटपुट कर सकते हैं। देखें कि बच निकले एचटीएमएल किस बिंदु पर पेश किया गया है। यदि यह आपको अधिक जानकारी नहीं देता है, तो PHP चर के बिना प्रयास करें, और बस कुछ यादृच्छिक सामान भरें।

अन्य उपाय:

  • PHPMailer विशेषता होने के साथ कोई समस्या हो सकती खाली (style='') - तुम इतनी है कि खाली विशेषताओं बाहर छोड़ दिया जाता है (या तो यह है कि गुण जोड़कर खाली कभी नहीं कर रहे हैं अपने कोड को फिर से लिखने की कोशिश कर सकते कुछ डमी पाठ, उदाहरण के लिए, शैली के लिए: text-align:left;)।
  • एचटीएमएल में ' के बजाय डबल कोट्स (") का प्रयास करें, PHPMailer को इसके साथ कोई समस्या हो सकती है।

सामान्य रूप से डिबगिंग पर: अपने कोड और आउटपुट डीबगिंग जानकारी को जितना संभव हो उतना निर्धारित करें कि यह निर्धारित करने के लिए कि आपको वास्तव में समस्या कहां है। क्या यह HTML बनाने में है, या क्या यह PHPMailer द्वारा किया जाता है जब आप इसे $order_mail->Body में लोड करते हैं? या ऐसा होता है जब आप Send() पर कॉल करते हैं (उस स्थिति में आप इसे PHP के साथ नहीं देख सकते हैं)?

+0

दिलचस्प बात यह है कि मैंने $ order_mail-> बॉडी और $ बॉडी स्क्रीन पर आउटपुट किया और चरित्र एन्कोडिंग समस्या को पुन: पेश नहीं कर सकता, तालिका ठीक से बनाई गई है। लेकिन जब उस बॉडी को PHPMailer Send() फ़ंक्शन के माध्यम से रखा जाता है, तो कभी-कभी यह बदल जाता है और यह < > में से कुछ को यादृच्छिक रूप से बदलता है। मैं त्रुटि को पुन: उत्पन्न कर सकता हूं लेकिन यह हर बार एक ही चरित्र पर नहीं होता है, कभी-कभी एक पंक्ति में कभी-कभी दूसरी पंक्ति होगी, और कभी-कभी कोई भी नहीं! शायद जो भी सर्वर प्रसंस्करण कर रहा है वह किसी भी तरह से अभिभूत हो रहा है। –

+0

@ एस मेसन क्या आपने मेरे अन्य सुझावों को आजमाया (कोई खाली HTML विशेषताएँ और सिंगल कोट्स के बजाय डबल कोट्स) भी? मैं Send() फ़ंक्शन को देखने के लिए कुछ समय ढूंढने का प्रयास कर सकता हूं और वापस रिपोर्ट करूंगा। – Keelan

+0

मैंने एक परीक्षण ईमेल के चयन भागों का एक स्क्रीनशॉट जोड़ा। मैं उपयोग कर रहा हूं मैं PHPMailer 5.1 का उपयोग कर रहा हूं (5.2 के रूप में अपग्रेड नहीं कर सकता है किसी कारण से काम नहीं करता है) मुझे लगता है कि समस्या कुछ स्थानों में एक जगह डालने वाले PHPMailer के साथ है। इनपुट बफर की तरह पूर्ण है और जब यह एक और इनपुट बफर शुरू करता है, तो यह इनपुट से पहले एक स्पेस जोड़ता है। या सोच रहा है कि समस्या phpMailer set_magic_quotes_runtime() फ़ंक्शन के उपयोग के साथ है, तो कुछ सही काम नहीं कर रहा है। –

-1

सुनिश्चित नहीं है कि इससे आपकी समस्या में मदद मिलेगी, लेकिन जाने के लायक होने पर, आप अपने चर को ब्रेसिज़ {$rush_part_style} में डालकर और अपने एचटीएमएल में डालने से एचटीएमएल को एचटीएमएल से जोड़ सकते हैं। यह आपको एचटीएमएल बंद करने और फिर से खोलने से बचाता है।

+0

बीटीडब्ल्यू यहां संगतता से बचने के लिए ब्रेसिज़ की कोई आवश्यकता नहीं है। "" या "" चर को प्रतिबिंबित करेगा क्योंकि डबल कोट्स का उपयोग किया जाता है।ब्रेस सरणी सदस्यों या ऑब्जेक्ट गुणों के लिए उपयोगी हैं, हालांकि, " id} \ ">" – billrichards

1

outputting न्यू लाइन पात्रों \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"; 

के अंत में मैं एक ऐसी ही मुद्दा था, और एचटीएमएल ईमेल के स्रोत निरीक्षण पर, ऐसा लगता है कि न्यू लाइन पात्रों कुछ हद तक मनमाने ढंग से डाला गया की कोशिश करो। </tr> बंद करने के बाद नई लाइन जोड़ना मेरे लिए ठीक था।