2012-01-24 36 views
1

我有一個客戶管理系統,我已經在php和mysql中編程。一家公司用它來記錄他們的營銷和訂單的客戶詳細信息。我的表單上有各種各樣的字段,其中之一是商業名稱。在文本字段中的&符號與顯示的字段數據扭轉

這些字段被導入到電子郵件發送給客戶的報價等。字段內容從數據庫中拉入並存儲在各種字符串中。公司名稱例如存儲在$name

我發現的問題是,如果企業輸入企業名稱,例如Joe Blogs & Sons導入到電子郵件系統中的末端是Joe Blogs,那就是,斷開連字符後的任何內容(包括&符號)。如果他們使用Joe Blogs and Sons這可以正常工作,並且當電子郵件發出時它會顯示Dear, Joe Blogs and Sons,但是如果有人輸入&,它只會以Dear, Joe Blogs結尾。

我是否正確地說s tr_replacepreg_replace之類的東西是用這種方法還是逃避&的方法? 。

+0

你檢查,如果名稱正確地存儲在數據庫中?如果是這樣,也許你應該在打印/回顯它們到電子郵件之前應用函數'htmlentities()'到變量。 – entropid

+0

信息太少。途中有很多步驟,文字在哪裏丟失? – deceze

+0

當它從數據庫中拉出並添加到一個字符串然後echo'd時,它會丟失,所以如果我從db中選擇並將結果放入一個字符串中,那麼會在字符串,&以及它和它消失後的所有內容中回顯。這個名字很好地存儲在數據庫中,因爲它們在編輯時將它們拉回到字段中。 –

回答

2

使用htmlentities()htmlspecialchars()來編碼特殊的HTML實體以注入HTML上下文。請注意,這些功能不足以滿足的任何其他上下文。例如:

好:

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

壞:

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

嗨,我知道這對HTML電子郵件是可以的,但它的工作原理的電子郵件雖然,我的意思是將它發送親愛的史密斯&兒子,還是我必須剝離之前,我發送它? –

+0

@IainSimpson:純文本是純文本。您不需要爲該上下文編碼任何內容。只需'echo $ foo;'或其他什麼。 – FtDRbwLXw6

+0

'Click me!'好! –

0

嘗試將&轉換爲&amp;。 有各種各樣的php功能。選擇一個適合你的

+0

這是發送電子郵件時轉換的,而不是將數據保存到數據庫嗎?就好像我用&&替換&,如果記錄被編輯,它會被拉到字段名稱中,我只是想知道它是否會有可能str_replace與&並在開機自檢。 –

0

這取決於你所說的「導入電子郵件」。

我想像你只需要到&的成&amp;'轉換秒 - 可能最好只是用htmlentities圍繞每一個變量(假設他們不認爲需要解析HTML)作爲「字符串清洗的部分「過程。

相關問題