2012-08-03 52 views
0

我正在使用contenteditable <div>編輯電子郵件(具體地說,與NicEdit)。我希望能夠在表單中提交郵件正文,使用PHP處理郵件,並使用mail()函數(或PHPMailer)發送它。在contenteditable divs中處理HTML實體

我遇到的問題是使用特殊字符和編碼。當一個特殊字符如πá被輸入到div中時,它將保持不變,而不會被轉換爲像&pi;&aacute;這樣的html實體。有些情況下它會被轉換,如<&lt;

所以當提交表單時,PHP收到的數據很難處理。寫

pi is "less than" 2 × pi: 
π < 2π 

提出以下數據中CONTENTEDITABLE DIV

<div>pi is "less than" 2 × pi:</div> 
<div>π < 2π</div> 

,這就是由PHP好評。但是,使用htmlentities()

&lt;div&gt;pi is &quot;less than&quot; 2 &times; pi:&lt;/div&gt; 
&lt;div&gt;&pi; &lt; 2&pi;&lt;/div&gt; 

這是除HTML標記正確的,所以,這個方法看來是無用的。原來接收的數據適合插入數據庫(我認爲),但是當我嘗試將它作爲電子郵件發送時,編碼會混淆。

從我的角度來看,這似乎是一個解決方案是編碼爲HTML標記之外的實體得到的東西是這樣的:

<div>pi is &quot;less than&quot; 2 &times; pi:</div> 
<div>&pi; &lt; 2&pi;</div> 

但是從谷歌和StackOverflow上搜索這似乎是一個壞事要做。所以我認爲在某些時候我必須在編碼方面做錯了事,無論是在發送電子郵件之前還是在回覆原始的可信數據之前。我正在尋找一個可行的解決方案,理想的情況是沒有像HTMLPurifier這樣的複雜庫。

任何想法?

編輯:我試過this solution將特殊字符轉換爲html實體時,他們不在標籤。當我嘗試輸入像π這樣的特殊字符時,這似乎很有效。但是該鏈接的答案已被拒絕,稱該方法從根本上是錯誤的。誰能告訴我爲什麼這是,爲什麼我不應該堅持htmlentitiesOutsideHTMLTags

回答

0

只是一個想法:

  • 步驟1: 將您<div> <b></b> </div>爲[DIV] [B] [/ B] [/ DIV]
  • 步驟2: 您ヶ輛
  • 步驟3:轉換您[DIV] [b] [/ b] [/ DIV]至<div> <b> </b> </div>

順便說一下,我認爲你可以在步驟1之前使用strip_tags()...

+0

感謝您的意見,但我試圖避免這種做法。當我找到一個答案時,我發現[this](http://stackoverflow.com/a/10277635/870965),它基於相同的方法,但被低估了。同樣[this](http://stackoverflow.com/a/6332363/870965)表示這種方法是「根本錯誤的」。如果沒有更好的解決方案,這似乎是一個不錯的最後手段。 – Zendmailer 2012-08-03 18:39:45

+0

嗯,這種方法似乎能夠像我希望的那樣工作,所以我想我會堅持下去。感謝你的回答。 – Zendmailer 2012-08-05 14:52:26