| 經驗交流 |
|
|---|---|
|
TextArea 輸入值之斷行處理 | |
問題說明 | |
| 提供一個 TextArea 供使用者輸入大量文字,在留言板、線上作業之類的場合是相當常見的。使用者在 TextArea 中輸入文字時,會使用 Enter 來斷行;但是,事後將該段文字顯示在瀏覽器上時,卻無法看到斷行的效果。 | |
我的做法 | |
| 其實這是瀏覽器與 TextArea 對文字斷行的看法不同所致,請先按下方的「確定」鍵,看看如何。 | |
| 當我們在 TextArea 中按下 Enter 鍵時,在原游標位置會被插入兩個字元:ASCII 13(carriage return)與 ASCII 10(line feed, new line),以達到換行的效果。 | |
| 在上面的測試中,若您曾經檢視其原始碼的話,您將會發現:ASCII 13 與 10 在原始碼中的確有換行的效果,但是瀏覽器不吃這套。 | |
| 在撰寫程式時,為了將程式碼排列整齊,「空格」、「TAB」與「換行」都是相當常用的,若瀏覽器將這些字元都反映在畫面上的話,則使用者所見的畫面反而會凌亂不堪。因此,想要在瀏覽器上產生換行的效果,您得使用 <BR> 才行。 | |
| 我使用 str_replace 函數將 ASCII 13 與 10 置換為 <BR>: | |
| $demo_text = str_replace( chr(13).chr(10), "<br>", $demo_text ); | |
|
在實際應用於留言板之類的場合時,何時該做置換的動作呢? | |
|
一、在留言人寫完文章存檔時進行: 這樣一來,此一置換的動作只需進行一次,在該留言重複被瀏覽時,不必再次進行;但是,若使用者要修改原先的留言時,您必須要進行「反置換」的動作(將 <BR> 置換為 ASCII 13 與 10)。 | |
|
二、在瀏覽該留言時進行: 這麼做的好處是不必在使用者修改留言時進行「反置換」的動作,但是當該留言被重複瀏覽時,將會加重 PHP 的負擔。 | |
|
假如您想加上其它的變化,例如每段前頭空兩格,則可以這麼做: | |
| $demo_text = str_replace( chr(13).chr(10), "<br> ", $demo_text ); | |
| 經驗交流 |
|


問題說明