2012-02-29 78 views
2

提交了一些人物,我有兩個問題刪除當通過POST

  1. 當我通過我的HTML表單提交字符'(使用POST)它是好的。然而,在我允許修改提交的內容的形式中,當它被帶入時,'之後的任何內容都消失了。我推斷這是因爲當我將包含'的文本內容分配給文本字段時,它會關閉引用。例如,如果我在那裏提交Hello,我是John,它會執行:<input type=text value='Hello there I'm Jon /> 所以,您看到,I'm中的撇號關閉了value屬性的引用。所以我能想到的唯一解決方案就是逃避撇號,但即使當我在內容上留下我的mysql_real_escape_string()函數時(因爲它已提交到數據庫,因此轉義併爲此表單檢索)。
  2. 同樣,當我提交&+時,它消失。無論使用htmlspecialchars()函數(我在印象之下應該用HTML格式對這些字符進行編碼,例如:&amp;),我都會嘗試在任何地方打印它。舉例來說,如果有人輸入Me & you,那麼它將顯示爲Me you

所以我問:如何解決上述問題,似乎與特殊字符有關,儘管已經讓他們逃脫了(我甚至嘗試再次應用轉義函數)?如果有任何示例代碼我應該提供,請告訴我,但我已經解釋了我對每個輸入所做的操作。

回答

2

當我通過我的HTML表單(使用POST)提交字符'它很好。然而,在我允許修改提交的內容的形式中,當它被引入時,'消失後的任何內容。我推斷這是因爲當我將包含'到'文本字段的文本內容分配給它時,它會關閉報價。例如,如果我在那裏提交Hello,我就是John,它會這樣做:<input type=text value='Hello there I'm Jon />所以你看,我的撇號關閉了value屬性的引用。所以我能想到的唯一解決方案就是逃避撇號,但即使當我在內容上留下我的mysql_real_escape_string()函數時(因爲它已提交到數據庫,因此轉義併爲此表單檢索)。

這與提交數據無關。您正試圖在'字符分隔的屬性值中使用'

使用htmlspecialchars($data, ENT_QUOTES)

同樣地,當我提交&或+,它就會消失。無論使用htmlspecialchars()函數(我在印象之下應該用HTML格式對這些字符進行編碼,例如:&),我都會在任何時候嘗試在任何地方打印它。舉個例子,如果有人進入我&你那麼它會顯示爲我你。

在編碼爲應用程序/ x-WWW窗體-urlencoded &數據的意思是「新的鍵=值對啓動」和+手段「的空間」。你需要urlencode($data)

+0

你對urlencoding正確,但這不應該是'POST'數據的問題......對吧? – davethegr8 2012-02-29 15:05:37

+0

@ davethegr8 - POST數據通常編碼爲application/x-www-form-urlencoded數據,使用與urls相同的格式。 – Quentin 2012-02-29 15:07:28

+0

所以,最後我會把'urlencode(htmlspecialchars($ data,ENT_QUOTES));'包含任何這些字符的所有字段? – muttley91 2012-02-29 15:23:23

2

首先,它有助於正確地包含HTML屬性,就像這樣:

<input type="text" value="Hello there I'm Jon" /> 

我使用雙引號,注意在值,你原來沒有尾隨報價。如果您隨後將值包含在htmlentities()中,您將能夠正確顯示/保存"或表單中的任何其他值。

儘管HTML5中並非嚴格需要雙引號('在大多數情況下都能正常工作),但他們至少受到鼓勵。如果您使用XHTML的一些變體,則它們是必需的。

+0

XHTML [不關心你是否使用雙引號或單引號](http://www.w3.org/TR/xml /#NT-AttValue)。除了約定之外,我從來沒有看到任何令人鼓舞的事情。 – Quentin 2012-02-29 15:05:34

+0

我爲此使用單引號的唯一原因是因爲我是從PHP打印的,因此寫單引號比雙引號更容易。但無可否認,在這種情況下,它可能解決我與'''有關的問題。 – muttley91 2012-02-29 15:19:11

+0

直到你開始處理包含''''的數據。 – Quentin 2012-02-29 15:28:43

1

一個懶惰但快速的方法是在發佈之前在字段的內容上使用urlencode(),而在另一側使用urldecode()。

這不是正確的方式,或者不錯的方式......但如果你不想編寫一些特定的代碼來處理這些情況,它就可以工作。