2011-04-03 46 views
3

在JSF頁面上有一個<textarea>元素,用戶輸入幾行並提交表單。我期望在服務器端有哪些行分隔符?JSF textarea和newline,什麼是存儲在服務器端?

  • \r\n的情況下,用戶的操作系統是Windows,\n - 當Unix的
  • 行分隔符取決於操作系統在我的JSF servlet正在運行
  • 行分隔符總是\n(Java的 內部一個)

回答

4

對於application/x-www-form-urlencodedmultipart/form-data請求中的換行符,HTML 4.0.1規範要求CR LF(\r\n)。

Servlet規範和JSF規範似乎都沒有關於行分隔符的任何說法。

+0

這是否意味着在* nix OS中我們也會有\ r \ n? – smas 2011-04-03 13:14:03

+0

@smas - 在Linux上進行快速測試(Firefox + Tomcat 7 servlet)顯示它發佈了'\ r \ n'。然而,我沒有測試過世界上所有的瀏覽器和servlet實現,所以它們可能並不全都符合規範處理線,而是採用線分界不可知的方式,這相對容易,所以我的代碼總是不會受到影響。無論哪種方式,您都需要轉換或驗證輸入,就像使用其他數據一樣。 – McDowell 2011-04-03 14:28:12

+0

一個實現是@Osw問題:) HTML規範讓我感到驚訝\ r \ n,我一直認爲\ r \ n只在M $下,所以很高興知道它 – smas 2011-04-03 14:46:38

3

我認爲,完整的答案是有點複雜:

  • @與在textarea的數據被作爲POST數據的情況下麥克道爾的回答交易。在這種情況下,HTML 4規範說換行符被編碼爲%轉碼的CR LF序列。

  • HTML 4規範不處理textarea數據作爲URL查詢參數發送的情況;例如在GET請求。

  • HTML 5規範說textarea的「值」被轉換爲CR LF序列,它涵蓋了所有情況......包括(我認爲)從客戶端大小的腳本訪問控件值的情況。當編碼傳輸時,該值將被%轉換。

綜上所述,規格說CR LF(即\r\n),他們說什麼,但它是可能,你可以看到CRLF用在某些平臺上某些HTML 4級或以上的瀏覽器。

+0

這裏有一些公平點;儘管JSF需要POST來更新模型,但即使世界上的每個客戶端/服務器都符合規範,也不會阻止某人制定「格式不正確」的行分隔符參數。輸入需要轉換或驗證,如果他們需要在一個特定的形式。 – McDowell 2011-04-03 14:34:51

相關問題