2012-08-03 2 views
0

콘텐트 편집 가능 <div>을 사용하여 전자 메일 메시지를 편집합니다 (특히 NicEdit). 양식으로 메시지 본문을 제출하고 PHP로 처리 한 다음 mail() 함수 (또는 PHPMailer)를 사용하여 메시지 본문을 보낼 수 있기를 원합니다.contenteditable div의 HTML 엔터티 처리

내가 겪고있는 문제는 특수 문자 및 인코딩과 관련이 있습니다. π 또는 á과 같은 특수 문자를 div에 입력하면 &pi; 또는 &aacute;과 같은 html 엔티티로 변환되는 대신 변경되지 않습니다. <에서 &lt;으로 변환되는 경우가 있습니다.

양식을 제출하면 PHP가받은 데이터를 처리하기가 어렵습니다.

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

쓰는의 contentEditable 사업부

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

에 다음 데이터를두고이 PHP에 의해 수신되는 것입니다. 그러나 htmlentities()를 사용하여 HTML 태그를 제외하고 올바른

&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 태그의 외부에있는 엔티티를 인코딩하는 것 같아 :

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

을하지만, 구글과에 StackOverflow에서 검색에서이는 것 같다 할 나쁜 일. 따라서 전자 메일을 보내거나 원래의 contenteditable 데이터를 반환하기 전에 인코딩을 잘못 처리해야합니다. HTMLPurifier 같은 복잡한 라이브러리없이 이상적으로 작동하는 솔루션을 찾고 있습니다.

아이디어가 있으십니까?

편집 :this solution 태그에없는 특수 문자를 HTML 엔터티로 변환하려고 시도했습니다. 이것은 π과 같은 특수 문자를 입력 할 때 잘 작동하는 것 같습니다. 그러나 해당 링크의 답변은 투표에서 제외되었으며 a similar answer은 접근 방법이 근본적으로 잘못되었다고 말합니다. 아무도 왜 이것이지, 그리고 내가 왜 htmlentitiesOutsideHTMLTags을 고수하지 말아야하는지 말해 줄 수 있습니까?

답변

0

그냥 아이디어 :

  • 1 단계 : 변환 당신에 <div> <b></b> </div> [DIV] [B] [/ B] [/ DIV]
  • 2 단계 : 당신를 htmlentities
  • 3 단계 : 변환하여 [DIV] [B] [/ B] [/ DIV]에 <div> <b> </b> </div>

그런데 1 단계 전에 strip_tags()를 사용할 수 있다고 생각합니다.

+0

입력 해 주셔서 감사합니다.하지만이 방법을 피하려고합니다. 내가 대답을 찾고있을 때 같은 접근 방식을 기반으로하지만 downvoted했다 [이] (http://stackoverflow.com/a/10277635/870965) 발견. 유사하게 [this] (http://stackoverflow.com/a/6332363/870965)는이 접근법이 '근본적으로 잘못'이라고 말합니다. 그래도 더 좋은 해결책이 없다면 이것은 좋은 마지막 수단처럼 보입니다. – Zendmailer

+0

글쎄,이 방법은 내가 희망 할 수있는 것처럼 잘 작동하는 것 같다. 답변 해주셔서 감사합니다. – Zendmailer

관련 문제