2013-10-02 73 views
2

我的表單中有一個文本字段,要求用戶輸入他/她的信息。我希望當我提交表單時,輸入的數據將所有換行符替換爲<br />標籤,以便當此數據存儲在數據庫中並稍後顯示時,格式設置是正確的。在提交表單之前用<br />標籤替換換行符?

<form action="index.php" method="post" name="add" enctype="multipart/form-data"> 

<p id="bio" style="display:none;"><label class="left">Bio</label><textarea name="bio"  rows="10" cols="50" class="contact"></textarea></p> 

<p class="submit" style="text-align:center;"><input type="submit" name="add" value="Submit" /></p> 

</form> 

我知道我必須使用str_replace,但我只是不知道在哪裏使用它。我想我對輸入的信息何時將被格式化感到困惑。

+5

在客戶端上應用格式是一個糟糕的主意。在數據庫中存儲格式化的數據(而不是原始數據)是一個糟糕的主意(除了緩存)。在地址中允許使用HTML是一個不好的主意(它會使你容易受到XSS攻擊的影響,除非你做一些相對較貴的事情(與簡單地轉義文本相比)昂貴的過濾)當你將地址插入HTML時,添加'
'元素,它與服務器端代碼。 – Quentin

+0

此表單位於管理員一方,該網頁是安全的,只能由有權限的人訪問。我只想將任何換行符更改爲
標籤。 [這](http://stackoverflow.com/questions/2813071/remove-line-breaks-and-add-br-tags-in-php)是我想要的但我只是不知道何時或如何申請它。 – user2441391

+0

你不只是相信人們不是惡意的,你也相信他們不會犯錯誤。做這個服務器端。它是你(或者至少應該)在你所有的地方進行HTML轉換的地方,所以在同一個地方做。 – Quentin

回答

10

保存時不應該改變數據(除了轉義不需要的字符和將日期轉換爲所需的格式(UTC或其他))。而不是改變它,當顯示它。

因此,使用\n s(允許稍後輕鬆編輯它)將數據保存在數據庫中,並且在顯示數據時,簡單地在變量周圍使用nl2br(),從數據庫中持有文本。

否則 - 編輯時 - 您需要將<br>轉換回\n秒,再次轉換爲<br>秒後保存。

+0

沒問題,你是這麼說的,我應該保持這個樣子。但是當我顯示信息時,我應該使用nl2br()? – user2441391

+0

@ user2441391數據庫不關心你保存的內容。但是,當您想要修改時,保存普通版本會更容易。就像,如果你想顯示3x值(用戶輸入1 - >顯示3),你將保存「值」(1),並顯示3倍。然後,您可以修改「值」而不進行任何反向計算。如果你最終想顯示'4x' - 你只需要改變顯示功能,而不是更新整個數據庫。 – dognose

+0

好吧,我明白了。我有個問題。由於數據庫不關心你保存的內容。如果我保存「A B」,它會不會在數據庫中另存爲「A B」或「AB」? – user2441391