在JSF頁面上有一個<textarea>
元素,用戶輸入幾行並提交表單。我期望在服務器端有哪些行分隔符?JSF textarea和newline,什麼是存儲在服務器端?
\r\n
的情況下,用戶的操作系統是Windows,\n
- 當Unix的- 行分隔符取決於操作系統在我的JSF servlet正在運行
- 行分隔符總是
\n
(Java的 內部一個)
在JSF頁面上有一個<textarea>
元素,用戶輸入幾行並提交表單。我期望在服務器端有哪些行分隔符?JSF textarea和newline,什麼是存儲在服務器端?
\r\n
的情況下,用戶的操作系統是Windows,\n
- 當Unix的\n
(Java的 內部一個)對於application/x-www-form-urlencoded和multipart/form-data請求中的換行符,HTML 4.0.1規範要求CR LF(\r\n
)。
Servlet規範和JSF規範似乎都沒有關於行分隔符的任何說法。
我認爲,完整的答案是有點複雜:
@與在textarea的數據被作爲POST
數據的情況下麥克道爾的回答交易。在這種情況下,HTML 4規範說換行符被編碼爲%轉碼的CR LF
序列。
HTML 4規範不處理textarea數據作爲URL查詢參數發送的情況;例如在GET
請求。
HTML 5規範說textarea的「值」被轉換爲CR LF
序列,它涵蓋了所有情況......包括(我認爲)從客戶端大小的腳本訪問控件值的情況。當編碼傳輸時,該值將被%轉換。
綜上所述,規格說CR LF
(即\r\n
),他們說什麼,但它是可能,你可以看到CR
或LF
用在某些平臺上某些HTML 4級或以上的瀏覽器。
這裏有一些公平點;儘管JSF需要POST來更新模型,但即使世界上的每個客戶端/服務器都符合規範,也不會阻止某人制定「格式不正確」的行分隔符參數。輸入需要轉換或驗證,如果他們需要在一個特定的形式。 – McDowell 2011-04-03 14:34:51
這是否意味着在* nix OS中我們也會有\ r \ n? – smas 2011-04-03 13:14:03
@smas - 在Linux上進行快速測試(Firefox + Tomcat 7 servlet)顯示它發佈了'\ r \ n'。然而,我沒有測試過世界上所有的瀏覽器和servlet實現,所以它們可能並不全都符合規範處理線,而是採用線分界不可知的方式,這相對容易,所以我的代碼總是不會受到影響。無論哪種方式,您都需要轉換或驗證輸入,就像使用其他數據一樣。 – McDowell 2011-04-03 14:28:12
一個實現是@Osw問題:) HTML規範讓我感到驚訝\ r \ n,我一直認爲\ r \ n只在M $下,所以很高興知道它 – smas 2011-04-03 14:46:38