我有一個系統設置爲用戶提交他們的文章到我的數據庫。既然它只是HTML,我不希望他們知道在每次換行時輸入<br />
,所以我在輸入上使用了PHP函數nl2br()
。在PHP中提交文本換行符轉換
我還提供了一個文章修改工具,它將他們的文章帶回到表單中(然而,這是一個不同的頁面),並允許他們編輯它。在這樣做的時候,<br />
元素也出現了(還有換行符)。爲了彌補出現的
元素(無論如何我曾預料過),我在本網站的其他問題中添加了preg_replace('/<br(\s+)?\/?>/i', "\n", mysql_result($result,$i,"content"))
。它的作用是去除<br />
元素,但由於它將用換行符替換它們,並且換行符本來會保持原樣,所以每次編輯帖子時,都會添加越來越多的換行符,將段落間隔越來越多每一次。這是用戶不會理解的。
舉個例子,說我輸入以下爲文章提交形式:
Hello, this is my article.
I am demonstrating a new line here.
這將轉換爲:
Hello, this is my article.<br />
I am demonstrating a new line here.
注意的是,即使換行字符被轉換,有在文中仍然是一條新線。在編輯表單中,<br />
將被轉換回換行,並期待這樣的:
Hello, this is my article.
I am demonstrating a new line here.
因爲<br />
轉化爲一個換行符,但已經有一個換行符。所以我想我希望是,它最初被轉換爲這樣的事:
Hello, this is my article.<br />I am demonstrating a new line here.
我不知道......有沒有辦法從保持原有換行停止nl2br()
功能?可能與Windows \r\n
有關?
您可能會遇到一些嚴重的頭痛,除非您的用戶都擅長HTML並且絕對值得信賴。因爲如果你允許人們將HTML上傳到你的網站上,而且大部分都是未經過濾的,那麼你正在引入一個巨大的XSS漏洞,可能還有一些社會工程入口點。 – tdammers 2012-02-26 16:22:32
爲什麼在第一次提交文章時需要將新行轉換爲
?您可以在顯示文章時對文章進行格式設置。 – 2012-02-26 16:27:54
@tdammers我目前沒有過濾它的唯一原因是因爲我想讓他們把以下內容: '
'和'' 如果我只能讓他們把這些,沒有別的,我會很樂意這樣做,因爲我非常贊同將HTML提交給我的網站不受歡迎。 我應該提到,那些可以提交文章的人受到僅限邀請的註冊流程的限制,但仍然有機會,我仍然會修復這些內容。 – muttley91 2012-02-26 17:20:54