2011-06-06 88 views
54

鑑於以下兩個HTML/PHP的片斷:如何在PHP中正確轉義html表單輸入默認值?

<input type="text" name="firstname" value="<?php echo $_POST['firstname']; ?>" />

<textarea name="content"><?php echo $_POST['content']; ?></textarea>

什麼字符編碼,我需要使用的呼應$_POST變量?我可以使用任何內置的PHP函數嗎?請假定$_POST值尚未編碼。沒有魔法沒有引號。

回答

85

使用htmlspecialchars($_POST['firstname'])htmlspecialchars($_POST['content'])

在向用戶顯示這些字符串之前,始終使用htmlspecialchars()轉義字符串。

+13

注:重要的是要使用雙「」標籤中的值屬性引用。 – 2012-11-30 00:18:42

+9

除非您將'ENT_QUOTES'指定爲第二個'htmlspecialchars()'參數,否則單引號不會被轉義。因此,在'$ _POST'值中出現的任何單引號將會突破「」字段。 – 2012-11-30 17:14:05

+5

注意:不要試圖使用htmlentities()。這打破了UTF-8字符。正如擺脫說,使用htmlspecialchars()。 – Brainware 2013-05-15 22:10:03

3

htmlspecialchars在兩種情況下都可以工作。查看不同的標誌選項以避免引號在input的情況下成爲問題。

7

然而,用htmlspecialchars()將不會幫助你value='single quotes'

這是發生了什麼:

value='We're not using this in our &quot;code&quot;...'

所有你看到的是We

+5

所以,不要在值中使用單引號。或使用ENT_QUOTES修飾符。沒有什麼大不了的 – 2011-09-04 05:36:09

+11

@YourCommonSense推測發佈的數據來自用戶,因此「不要在值中使用單引號」不是非常有用的建議。使用'ENT_QUOTES'是正確的解決方案,但記住這樣做可能是一個「大問題」。 – 2012-11-30 17:31:17

+0

如果您不使用'ENT_QUOTES'參數,則單引號不會轉義。如果在輸入標籤中將value參數定義爲'value =「雙引號」',這不是問題。雙引號在用戶提供的字符串中被轉義,而具有「value =」...的部分由服務器提供。 – GoTo 2014-09-18 08:17:37