2013-05-29 14 views
23

當內容類型爲application/x-www-form-urlencoded時,是否習慣於省略;charset="utf-8"application/x-www-form-urlencoded和charset =「utf-8」?

特別是,在表單標籤中使用accept-charset="utf-8"時,我希望有一些信息表明utf-8正在頭文件中使用,但我沒有看到任何信息。

這是我在Chrome中的簡單測試。表單頁面:

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> 
</head> 
<body> 
<form method="POST" action="printenv.cgi" accept-charset="utf-8"> 
Your name: 
<input name="name" type="text" size="30"> 
</form> 
</body> 
</html> 

而標頭生成的請求是:

POST /printenv.cgi HTTP/1.1 
Host: ...:8000 
Connection: keep-alive 
Content-Length: 19 
Cache-Control: max-age=0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Origin: http://...:8000 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36 
Content-Type: application/x-www-form-urlencoded 
Referer: http://...:8000/utf8-test.html 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-US,en;q=0.8 

什麼是用於指定形式參數值是如何編碼的約定?

回答

24

1)沒有爲此媒體類型定義的字符集參數。

2)有關編碼準則,請參見​​。

+7

哦,有趣的消息我不知道:*「如果條目的名稱是」_charset_「,並且它的類型是」hidden「,則用charset替換它的值。「* – deceze

+0

請注意,您正在鏈接到** HTML 5 **規範,但所討論的HTML正在使用** HTML 4 **。下面是HTML 4的表單提交算法:http://www.w3 .org/TR/1999/REC-html401-19991224/interact/forms.html#h-17.13,儘管它沒有談論字符集處理。 –

+0

Remy:doctype不會影響瀏覽器在表單編碼方面做些什麼。 –

4

注意:在上面的鏈接的步驟2中它說:「否則,讓選定的字符編碼爲UTF-8。」 (看:http://www.w3.org/TR/html5/forms.html#application/x-www-form-urlencoded-encoding-algorithm。)

我也相信這似乎表明,這是用戶代理使用UTF-8的最佳做法?

http://www.w3.org/TR/html40/appendix/notes.html#non-ascii-chars

這裏是這樣說的:在URI屬性 B.2.1非ASCII字符值

雖然URI的不包含非ASCII值(參見[URI],第2.1節)的作者有時在需要URI的屬性值中指定它們(即,在DTD中用%URI定義)。例如,下面href的值是非法的:

...

我們建議用戶採用代理在這種情況下,處理非ASCII字符以下約定:

Represent each character in UTF-8 (see [RFC2279]) as one or more bytes. 
Escape these bytes with the URI escaping mechanism (i.e., by converting each byte to %HH, where HH is the hexadecimal notation of the byte value). 

此過程結果在語法上合法的URI(如[RFC1738],第2.2節或[RFC2141]第2節中所定義的)獨立於承載URI的HTML文檔可能已被轉碼的字符編碼。

注意。一些較早的用戶代理通過使用接收文檔的字符編碼的字節來簡單地處理HTML中的URI。一些較老的HTML文檔依賴於這種做法,並在轉碼時破壞。想要處理這些較舊文檔的用戶代理在收到包含合法集外的字符的URI時,應首先使用基於UTF-8的轉換。只有在得到的URI不能解決時,他們才應該嘗試根據接收文檔的字符編碼的字節來構造一個URI。

注意。應該將相同的基於UTF-8的轉換應用於A元素的name屬性的值。