ใน Ruby on Rails 3 (ปัจจุบันใช้ Beta 4) ฉันเห็นว่าเมื่อใช้form_tag
หรือform_for
ผู้ช่วยเหลือมีฟิลด์ที่ซ่อนชื่อที่_snowman
มีค่า of ( Unicode \ x9731) ปรากฏขึ้น
ดังนั้นสิ่งนี้มีไว้เพื่ออะไร?
ใน Ruby on Rails 3 (ปัจจุบันใช้ Beta 4) ฉันเห็นว่าเมื่อใช้form_tag
หรือform_for
ผู้ช่วยเหลือมีฟิลด์ที่ซ่อนชื่อที่_snowman
มีค่า of ( Unicode \ x9731) ปรากฏขึ้น
ดังนั้นสิ่งนี้มีไว้เพื่ออะไร?
คำตอบ:
พารามิเตอร์นี้ถูกเพิ่มไปยังแบบฟอร์มเพื่อบังคับให้ Internet Explorer (5, 6, 7 และ 8) เพื่อเข้ารหัสพารามิเตอร์เป็น unicode
โดยเฉพาะข้อผิดพลาดนี้สามารถถูกเรียกใช้หากผู้ใช้สลับการเข้ารหัสของเบราว์เซอร์เป็น Latin-1 เพื่อให้เข้าใจว่าเหตุใดผู้ใช้จึงตัดสินใจที่จะทำสิ่งที่ดูบ้าคลั่งลองดูที่การค้นหาของ Googleนี้ เมื่อผู้ใช้วางเว็บไซต์ลงในโหมด Latin-1 หากพวกเขาใช้ตัวอักษรที่สามารถเข้าใจได้ทั้ง Latin-1 และ Unicode (ตัวอย่างเช่นéหรือçทั่วไปในชื่อ) Internet Explorer จะเข้ารหัสเป็นภาษาละติน -1
ซึ่งหมายความว่าหากผู้ใช้ค้นหา "Ché Guevara" จะเกิดความผิดพลาดทางฝั่งเซิร์ฟเวอร์ ใน Ruby 1.9 สิ่งนี้จะส่งผลให้เกิดข้อผิดพลาดในการเข้ารหัสเมื่อข้อความเข้ามาในเอ็นจินนิพจน์ทั่วไป ใน Ruby 1.8 มันจะส่งผลให้ผลลัพธ์ที่ขาดสำหรับผู้ใช้
ด้วยการสร้างพารามิเตอร์ที่ IE สามารถเข้าใจได้เป็นอักขระยูนิโค้ดเท่านั้นเรากำลังบังคับให้ IE ดูแอตทริบิวต์ accept-charset ซึ่งจะบอกให้เข้ารหัสอักขระทั้งหมดเป็น UTF-8 แม้แต่ตัวที่สามารถเข้ารหัสได้ ในละติน -1
โปรดจำไว้ว่าใน Ruby 1.8 นั้นเป็นเรื่องง่ายมากที่จะนำข้อมูล Latin-1 ไปไว้ในฐานข้อมูล UTF-8 ของคุณ (เนื่องจากไม่มีสิ่งใดในสแต็กทั้งหมดตรวจสอบว่าไบต์ที่ผู้ใช้ส่ง ณ จุดใด ๆ เป็นอักขระ UTF-8 ที่ถูกต้อง) ดังนั้นจึงเป็นเรื่องธรรมดามากสำหรับแอปพลิเคชั่น Ruby (และแอปพลิเคชั่น PHP และอื่น ๆ ) เพื่อแสดงบั๊กที่ผู้ใช้พบเจอดังนั้นจึงเป็นเรื่องธรรมดามากที่ผู้ใช้จะพยายามเปลี่ยนการเข้ารหัสเป็นแบบประคับประคอง
ทุกอย่างที่กล่าวว่าเมื่อฉันเขียนโปรแกรมแก้ไขนี้ฉันไม่ทราบว่าชื่อของพารามิเตอร์จะปรากฏในที่ที่ผู้ใช้หันหน้าไปทาง (มันใช้รูปแบบที่ใช้การกระทำของ GET เช่นแบบฟอร์มการค้นหา) เนื่องจากเป็นเช่นนั้นเราจะเปลี่ยนชื่อพารามิเตอร์นี้เป็น_e
และใช้อักขระ unicode ที่ดูไม่น่ากลัวยิ่งขึ้น
นี่คือการสนับสนุน Internet Explorer 5 และสนับสนุนให้ใช้UTF-8สำหรับแบบฟอร์ม
ข้อความคอมมิทที่เห็นที่นี่มีรายละเอียดดังนี้:
แก้ไขปัญหาการเข้ารหัสเว็บที่รู้จักหลายประการ:
- ระบุ accept-charset ในทุกรูปแบบ เบราว์เซอร์ล่าสุดทั้งหมดรวมถึง IE5 + จะใช้การเข้ารหัสที่ระบุสำหรับพารามิเตอร์ของฟอร์ม
- น่าเสียดายที่ IE5 + จะไม่ดู accept-charset เว้นแต่อย่างน้อยหนึ่งอักขระในค่าของแบบฟอร์มไม่ได้อยู่ในชุดอักขระของหน้า เนื่องจากผู้ใช้สามารถลบล้าง
ชุดอักขระเริ่มต้น(ซึ่ง Rails ตั้งค่าเป็น UTF-8) เราจึงจัดเตรียมอินพุตที่ซ่อนอยู่ซึ่งมีอักขระยูนิโค้ดบังคับให้ IE ดูที่ชุดอักขระยอมรับ- ตอนนี้ส่วนใหญ่ของการป้อนข้อมูลเว็บเป็น UTF-8 เราตั้งค่าพารามิเตอร์ขาเข้าเป็น UTF-8 สิ่งนี้จะกำจัดการเข้ารหัสที่เข้ากันไม่ได้ระหว่าง ASCII-8BIT และ
UTF-8- คุณสามารถละเว้น params ได้อย่างปลอดภัย [: _ snowman]
ในระยะสั้นคุณสามารถละเว้นพารามิเตอร์นี้ได้อย่างปลอดภัย
ถึงกระนั้นฉันก็ยังไม่แน่ใจว่าทำไมเราถึงสนับสนุนเทคโนโลยีเก่า ๆ เช่น Internet Explorer 5 ดูเหมือนว่าจะไม่ใช่ Ruby on Rails ถ้าคุณถามฉัน