1

從我讀過的東西看來,瀏覽器似乎必須在生成請求的表單的字符集中的請求中發送x-www-form-urlencoded數據。添加utf8 =✓到查詢有什麼意義?

那麼,爲什麼有些網站(例如http://www.railscasts.com)添加了?utf8 =%E2%9C%93(即?utf8 =✓)來形成?這是一種黑客行爲,可以讓事情變得更容易嗎?該頁面的字符集已經是UTF-8(我檢查了標題),所以不能保證瀏覽器將發送UTF-8?哪些瀏覽器不這樣做?根據w3schools,所有主流瀏覽器都採用從形式的接受字符集:

<form accept-charset="UTF-8"> 

那麼爲什麼不使用它呢?或者什麼都沒有(因爲響應指定了UTF-8)?

我做了一些調查:

在UTF-8頁,它看起來好像尋找木(U + 6728)給出:

search:%E6%9C%A8 

所以它使用百分號編碼,這似乎以字節爲單位編碼任何底層字符集的十六進制編碼。那麼,這絕對有效,因爲this place說這是UTF-8編碼。這很好,但這是一個簡單的例子,我試圖將UTF-8數據發送到UTF-8頁面。

現在我們假設我有一個ISO-8859-1頁面,它有一個表單。這是一個GET表單,我決定爲一個字段輸入相同的。那麼,這絕對不是ISO-8859-1。因此Chrome將其編碼爲

search:&#26408; 

然後將其百分比編碼爲%26%2326408%3B。我驗證了IE 8在Windows中執行相同的操作。那麼UTF-8破解有什麼意義呢?

相關問題:Detecting the character encoding of an HTTP POST request

回答

2

加入一些特殊的字符爲隱藏數據的技術是在舊時代的發展,在不同的瀏覽器在不同的編碼提交的數據。它被描述爲例如在文檔FORM submission and i18n中,如下所示:「作者可以在表單中添加精心製作的包含多個診斷字符的」隱藏「字段。當提交此字段時,服務器可以調查已提交內容的格式,並得出關於客戶端軟件正在使用什麼編碼的一些結論。「

該技術失去了很多原始相關性,但它是仍然是一種廉價的方式來做一些基本的正確性檢查。它可以檢測到問題當有人創建表單的副本並使用它(由於無知,粗心或其他原因)提交數據以便編碼不是應該的。