2012-01-24 10 views
1

私はphpとmysqlでプログラミングした顧客管理システムを持っています。会社はマーケティングや注文のために顧客の詳細を記録するためにそれを使用します。フォームにはさまざまなフィールドがあり、そのうち1つはビジネス名です。テキストフィールド内のアンパサンドがフィールドデータの表示に悩まされています

フィールドは電子メールにインポートされ、顧客の見積もりなどに送信されます。フィールドの内容はデータベースから取り込まれ、さまざまな文字列に格納されます。例えば、事業名は$nameに格納されています。

Joe Blogs & Sonsのような企業名が入力された場合、電子メールシステムにインポートされる終了点はJoe Blogsであり、それはアンパサンドを含むアンパサンドが切り捨てられた後のものです。彼らがJoe Blogs and Sonsを使用する場合、これはうまく動作し、電子メールが出るときにはDear, Joe Blogs and Sonsと表示されますが、誰かが&と入力すると、それはちょうどDear, Joe Blogsとなります。

&さんのエスケープ方法と一緒に行くには、tr_replaceまたはpreg_replaceのようなものが正しいでしょうか? 。

+0

は、あなたがチェックしましたか?そうであれば、変数に 'htmlentities()'関数を適用して電子メールに出力/エコーするだけでよいでしょう。 – entropid

+0

情報が少なすぎます。道には多くの措置がありますが、テキストはどこに欠落していますか? – deceze

+0

データベースから引き出された後に文字列にecho'dを追加すると、その文字列がエコーされてしまいます。名前は、編集時にフィールドに戻されるため、データベースに保存されます。 –

答えて

2

HTMLコンテキストに特殊なHTMLエンティティを挿入するには、htmlentities()またはhtmlspecialchars()のいずれかを使用します。これらの関数は、その他のコンテキストでは、では不十分です。例:

良い:悪い

<p><?php echo htmlspecialchars($foo); ?></p> 

:名前が正しくデータベースに格納されている場合

<a href="<?php echo htmlspecialchars($bar); ?>">Click me!</a> 
+0

こんにちは、これはhtml電子メールでは大丈夫ですが、プレーンテキストの電子メールでもうまくいくと思います.Dear Smithを送信しますか?& Son、または送信する前にもう一度削除する必要がありますか? –

+0

@IimSimpson:プレーンテキストはプレーンテキストです。そのコンテキストのために何かをエンコードする必要はありません。ちょうど 'エコー$ foo;'または何でも。 – FtDRbwLXw6

+0

Click me!」良い! –

0

&を&amp;に変換してください。 それにはさまざまなPHP関数があります。あなたに合ったものを選択してください。

+0

これは電子メールの送信時に変換されますか?データをdbに保存しないでください。&を&と置き換えた場合、レコードが編集された場合はフィールド名にプルされます。 POSTで&withとonをstr_replaceすることができました。 –

0

"メールにインポートされました"という意味にかかっています。

私はあなただけの「が&amp;にS」の&を変換する必要が想像 - おそらく最高のちょうどあなたの「文字列の清掃の一環として、(彼らが解析された必要なHTMLを持っていないと仮定)、各変数の周りhtmlentitiesを使用します"プロセス。

関連する問題