2010-01-06 26 views
6

Hôm nay, tôi đã nhìn vào HTML của facebook.com, và tìm thấy một cái gì đó như thế này:Cơ chế phát hiện bộ ký tự Facebook?

<input type="hidden" value="€,´,€,´,水,Д,Є" name="charset_test"/> 

Nó lặp đi lặp lại hai lần trong <form>...</form>.

Bất kỳ ý tưởng nào về mã này có thể hữu ích cho - một số loại phát hiện bộ ký tự máy khách phía máy chủ? Theo tôi biết, bộ mã trình duyệt đang được truyền đi trong yêu cầu HTTP (tiêu đề "Accept-Charset").

Trả lời

4

Bất kỳ ý tưởng gì mã này có thể có ích cho - một số loại server-side phát hiện khách hàng charset?

Dường như vậy.

Dấu hiệu Euro là hữu ích để phát hiện charset bởi vì có rất nhiều cách để mã hóa nó:

  • E2 82 AC trong UTF-8
  • 88 trong windows-1251
  • 80 trong khác mã hóa windows-125x
  • A4 trong ISO-8859-7, -15, -16 và
  • A2 E3 trong GB18030
  • 85 40 trong Shift-JIS
  • , vv

Theo như tôi biết, charset trình duyệt đang được truyền đi trong yêu cầu HTTP anyway (một tiêu đề "Accept-Charset").

phải để truyền trong HTTP Content-Type tiêu đề, nhưng điều đó không có nghĩa là đại lý người dùng thực sự làm cho nó đúng.

3

Tôi đoán chúng khớp với tập lệnh nhận để đảm bảo khách hàng gửi yêu cầu được mã hóa đúng như UTF-8 và thậm chí có thể, vì họ biết ký tự mong đợi, phát hiện mã hóa thực tế khi đang bay.

Nếu tôi nhớ chính xác - tôi phải đối phó với nó một lần - đã xảy ra sự cố với mã hóa biểu mẫu trong IE6 trong một số trường hợp.

+0

Cảm ơn bạn, tôi sẽ google về vấn đề biểu mẫu liên quan đến IE6 này. – Void

+0

Tôi có thể sai, nhưng tôi nghĩ * đó là nội dung về mã hóa không rõ ràng (nghĩa là khi tiêu đề 'content-type' có nội dung khác với thẻ META' content-type'). Dù sao, tôi nghĩ rằng Facebook đang làm điều này bởi vì họ đang được truy cập bởi tất cả các loại khách hàng, và họ cần phải chắc chắn rằng mã hóa của họ nói chung là đúng. –

0
&euro;,&acute;,€,´,水,Д,Є 

Tôi đoán một số trình duyệt gửi &euro; giống như &acute; giống như ´,

Vì vậy, họ có thể kiểm tra như charset_test [0] == charset_test [2] và charset_test [1] == charset_test [ 3]

Đối với các ký tự khác, tôi không có đầu mối.水 có thể thử nghiệm cho CJK.

0

Như Pekka nói, điều này là để có thể phát hiện bộ ký tự yêu cầu. Giao thức HTTP không cung cấp cách xác định bộ ký tự của yêu cầu. Bởi vì điều này, người ta phải dựa vào các công ước bên ngoài giao thức. Nói chung các trình duyệt có thể dự đoán được, nhưng mẹo này là cách duy nhất để chắc chắn 100%.

Xem thêm: http://www.phpwact.org/php/i18n/charsets

Các vấn đề liên quan