0

contenteditable<div>を使用して電子メール メッセージを編集しています (具体的にはNicEditを使用)。mail()メッセージ本文をフォームで送信し、PHP で処理し、関数 (またはPHPMailer )を使用して送信できるようにしたいと考えています。

私が抱えている問題は、特殊文字とエンコーディングに関係しています。πorなどの特殊文字をdiv に入力すると、 oráのような html エンティティに変換される代わりに変更されません。のように変換される場合もあります。&pi;&aacute;<&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>

しかし、Google と StackOverflow で検索すると、これは悪いことのようです。したがって、電子メールを送信する直前であろうと、元の contenteditable データで返送されようと、ある時点でエンコーディングに何か問題があるに違いないと思います。理想的には HTMLPurifier のような複雑なライブラリがなくても機能するソリューションを探しています。

何か案は?

編集:タグに含まれていない特殊文字をhtmlエンティティに変換するために、このソリューションを試しました。のような特殊文字を入力しようとすると、これはうまくいくようπです。しかし、そのリンクからの回答は反対票を投じられており、同様の回答は、アプローチが根本的に間違っていると述べています. これがなぜなのか、なぜ私が固執すべきではないのか、誰か教えてもらえますhtmlentitiesOutsideHTMLTagsか?

4

1 に答える 1

0

ただのアイデア:

  • ステップ 1<div> <b></b> </div> : [div] [b] [/b] [/div] に変換します
  • ステップ 2 : あなたの Htmlentities
  • ステップ 3 : [div] [b] [/b] [/div] を<div> <b> </b> </div>

ちなみに、ステップ1の前にstrip_tags()が使えると思いますが…

于 2012-08-03T18:16:11.083 に答える