การเข้ารหัสอะไร? แก้ไขปัญหาการเข้ารหัสหน้าเว็บไม่ถูกต้อง

ข้อมูลเบื้องต้น

  1. ลองใช้เว็บไซต์ของเราเป็นตัวอย่าง: www.yourmaster.ru
  2. ข้อความไซต์ทั้งหมดเขียนและโพสต์บนเว็บไซต์ด้วยการเข้ารหัส "วินโดว์-1251"และเบราว์เซอร์ไม่ได้รับแจ้งเกี่ยวกับเรื่องนี้
  3. เซิร์ฟเวอร์โฮสติ้งจะส่งส่วนหัวต่อไปนี้โดยอัตโนมัติตามค่าเริ่มต้น:
    ประเภทเนื้อหา: text/html; ชุดอักขระ=utf-8

หากมีความแตกต่างในการเข้ารหัสจริงของเว็บไซต์และข้อมูลการเข้ารหัสในส่วนหัวที่ส่งโดยเซิร์ฟเวอร์ ปัญหาจะเกิดขึ้นในการแสดงหน้าเว็บไซต์ในเบราว์เซอร์ของผู้เยี่ยมชม

การเข้ารหัสที่ถูกต้องเป็นสิ่งสำคัญมาก!

ลองอธิบายว่าทำไม

ด้วยการตั้งค่าที่อธิบายไว้ข้างต้น เบราว์เซอร์ของผู้ใช้จะไม่สามารถระบุได้โดยอัตโนมัติว่าข้อความใดที่เข้ารหัสบนไซต์ที่กำลังดูอยู่ และมีแนวโน้มว่าจะแสดงหน้าต่างๆ ในลักษณะยุ่งเหยิงที่ไม่สามารถอ่านได้ หากคุณพบ "การสื่อสารที่ผิดพลาด" ระหว่างเบราว์เซอร์และไซต์ของคุณ คุณจำเป็นต้องดำเนินการตามความเหมาะสมอย่างเร่งด่วน มิฉะนั้นอาจนำไปสู่ปัญหาร้ายแรงตามมาได้

ประการแรกในเงื่อนไขและการตั้งค่าไซต์ดังกล่าว ผู้เยี่ยมชมจะต้องระบุการเข้ารหัสสำหรับเบราว์เซอร์เพื่อแสดงไซต์ด้วยตนเองอย่างต่อเนื่อง (โดยใช้วิธีการเลือก) ซึ่งจะต้องคลิกเมาส์เพิ่มเติมสองสามครั้ง แต่คุณต้องยอมรับว่าไม่ใช่ทุกคนที่ต้องการคลิกเมาส์เพิ่มอีก 2-3 ครั้งเพื่อดูข้อมูลบนหน้าในรูปแบบที่อ่านได้ ยิ่งไปกว่านั้น หลายคนไม่รู้ด้วยซ้ำว่าจะเปลี่ยนการเข้ารหัสการแสดงผลในการตั้งค่าเบราว์เซอร์ได้อย่างไร แต่ยังไม่รู้ด้วยซ้ำว่าการเข้ารหัสโดยทั่วไปคืออะไร! ผู้เยี่ยมชมส่วนใหญ่อาจตัดสินใจว่าไซต์นั้นถูกละทิ้งโดยเจ้าของหรือถูกแฮ็กโดยใครบางคน และจะพยายามไม่กลับมาที่ไซต์นั้นอีก

ประการที่สองหากมีคำจำกัดความที่ไม่ชัดเจนของการเข้ารหัสหน้าเว็บไซต์ เครื่องมือค้นหาอาจจัดทำดัชนีเนื้อหาข้อความของเว็บไซต์ไม่ถูกต้อง- ซึ่งจะทำให้เกิดปัญหาร้ายแรงกับปริมาณการใช้งานของผู้ใช้จากเครื่องมือค้นหา แน่นอนว่าเครื่องมือค้นหาบางตัวอาจพยายามระบุการเข้ารหัสที่ถูกต้องจากเนื้อหาของหน้า แต่ก็ไม่ได้ทำให้ง่ายขึ้นมากนัก ตามกฎแล้วปัญหายังคงอยู่

ฉันหวังว่าคุณจะตระหนักว่าปัญหาในการเขียนโค้ดอาจเป็นอุปสรรคร้ายแรงต่อการทำงานของเว็บไซต์ การพัฒนา และการดึงดูดผู้เข้าชมเป็นประจำ

เพื่อให้แน่ใจว่าไม่มีปัญหาในการเข้ารหัสเกิดขึ้น คุณต้องทำการตั้งค่าที่เหมาะสมทั้งบนเซิร์ฟเวอร์โฮสต์และบนหน้าไซต์

การตั้งค่าไซต์จะต้องเป็นแบบที่เบราว์เซอร์หรือโรบ็อตเครื่องมือค้นหาใด ๆ สามารถระบุได้โดยไม่ได้ตั้งใจว่าการเข้ารหัสข้อมูลจากไซต์จะถูกส่งไป!

การแก้ปัญหาการเข้ารหัสไซต์

เราสังเกตเห็นแล้วว่าข้อความทั้งหมดบนไซต์ของเราเขียนและส่งไปยังเบราว์เซอร์ของผู้เยี่ยมชมไซต์ด้วยการเข้ารหัส "windows-1251" เราจะทำอย่างไรเพื่อให้แน่ใจว่าเซิร์ฟเวอร์ที่โฮสต์ไซต์ของเราส่งข้อมูลการเข้ารหัสที่ถูกต้องไปยังเบราว์เซอร์ในส่วนหัว มาดำเนินการตามลำดับ...

1. เพื่อไม่ให้ขึ้นอยู่กับการตั้งค่าเซิร์ฟเวอร์ในทุกหน้าของไซต์โดยใช้โค้ด HTML โดยตรง คุณต้องเขียนคำสั่งต่อไปนี้อย่างชัดเจนโดยใช้เมตาแท็ก:

ต้องวางไว้ในทุกหน้า โดยควรอยู่หลังแท็กเปิด - สิ่งนี้จะช่วยให้เบราว์เซอร์เลือกการเข้ารหัสการแสดงผลที่ถูกต้องโดยอัตโนมัติเมื่อโหลดและตีความเพจตามคำสั่งที่ได้รับ! คำสั่งนี้เพียงอย่างเดียวน่าจะเพียงพอที่จะแก้ไขปัญหาของเราได้ แต่นั่นเป็นวิธีที่มันตั้งใจไว้ในทางทฤษฎี แต่ในทางปฏิบัติ คำสั่งนี้ไม่เพียงพอเสมอไป ในบางกรณีที่เกิดขึ้นไม่บ่อยนัก แต่เบราว์เซอร์เลือกเป็นการเข้ารหัสสำหรับการแสดงเพจ ไม่ใช่อันที่ระบุไว้ในคำสั่งของเพจ แต่เป็นอันที่ส่งในส่วนหัวจากเซิร์ฟเวอร์! และหากข้อมูลการเข้ารหัสที่ระบุในสองแห่งไม่ตรงกัน ปัญหาก็อาจยังคงอยู่

2. เพื่อให้เซิร์ฟเวอร์ให้ข้อมูลการเข้ารหัสที่ถูกต้องในการตอบกลับคุณต้องสร้างไฟล์ที่รากของไซต์ของคุณ .htaccessและเขียนคำสั่งลงไปว่า:

เพิ่มDefaultCharset วินโดว์-1251

จากนั้นเซิร์ฟเวอร์จะส่งส่วนหัวการเข้ารหัสต่อไปตามค่าเริ่มต้น แต่ชื่อของการเข้ารหัสจะตรงกับชื่อที่มีผลกับไซต์เอง จะไม่มีความคลาดเคลื่อนในชื่ออีกต่อไป

ถ้าเป็นไฟล์ .htaccessมีอยู่แล้วบนเซิร์ฟเวอร์ของคุณ จากนั้นเพียงเพิ่มคำสั่งที่ระบุ เช่น ที่จุดเริ่มต้น และคุณไม่ควรลบข้อมูลที่มีอยู่แล้วโดยไม่จำเป็นไม่ว่าในกรณีใด!

นั่นคือวิธีแก้ปัญหา เห็นด้วยทั้งหมดนี้ไม่ใช่เรื่องยากใช่ไหม! แต่มันมีประโยชน์มากในการป้องกันปัญหาทุกประเภทเกี่ยวกับการเข้ารหัสที่มีชื่อเสียง

หากปฏิบัติตามคำแนะนำทั้งสองข้อข้างต้นติดต่อกัน เบราว์เซอร์จะไม่สามารถทำผิดพลาดในการเลือกการเข้ารหัสที่ถูกต้องสำหรับการแสดงข้อมูลบนเว็บไซต์ของคุณได้โดยอัตโนมัติ ท้ายที่สุด เราได้ระบุข้อมูลการเข้ารหัสอย่างชัดเจน ถูกต้อง และแม้กระทั่งในสองคำสั่งที่แตกต่างกัน!

สถานการณ์พิเศษ

สถานการณ์ที่หนึ่ง

ผู้สร้างเว็บไซต์ และบ่อยครั้งกว่านั้นแม้แต่ตัวลูกค้าเองก็เริ่มทำการแก้ไขบางอย่างบนเว็บไซต์โดยพลการและไร้ความคิด วางข้อความตามที่ต้องการ ฯลฯ จนถึงจุดที่ส่งผลให้พวกเขาอาจไปอยู่บนเว็บไซต์ได้ ส่วนที่มีข้อมูลในการเข้ารหัสที่แตกต่างกัน- เราไม่สามารถพูดได้ว่านี่เป็นแนวทางที่ถูกต้อง แต่เราจะขจัดความจริงที่ว่าสิ่งนี้เกิดขึ้น แค่นั้นเอง ในกรณีนี้ แม้ว่าเราจะปฏิบัติตามคำแนะนำทั้งสองรายการข้างต้น สถานการณ์อาจยังคงเกิดขึ้นเมื่อเซิร์ฟเวอร์ให้ข้อมูลเกี่ยวกับการเข้ารหัสรายการหนึ่ง และการเข้ารหัสอีกรายการหนึ่งเขียนไว้อย่างชัดเจนในโค้ด HTML ของหน้าเว็บ ในกรณีเช่นนี้ วิธีแก้ปัญหาที่ง่ายที่สุดอาจเป็นดังนี้

เขียนลงไฟล์ .htaccessคำสั่ง:

เพิ่มค่าเริ่มต้นชาร์เซตปิด

เมื่อใช้คำสั่งนี้ เซิร์ฟเวอร์จะไม่ส่งส่วนหัวพร้อมข้อมูลเกี่ยวกับการเข้ารหัสของหน้าที่ส่งเลย จากนั้นเบราว์เซอร์จะเริ่มจากข้อมูลการเข้ารหัสซึ่งระบุไว้อย่างชัดเจนในโค้ด HTML บนหน้าเว็บไซต์ นอกจากนี้ในหนึ่งหน้าข้อมูลอาจถูกเข้ารหัส วินโดว์-1251และในอีกหน้าหนึ่ง เช่น ใน utf-8- สิ่งสำคัญคืออย่าลืมระบุเมตาแท็กที่เหมาะสมในหน้าเหล่านี้พร้อมข้อมูลเกี่ยวกับการเข้ารหัสที่ถูกต้องสำหรับการรับรู้และการแสดงข้อความโดยเบราว์เซอร์

แม้ว่าวิธีแก้ปัญหาดังกล่าวจะเป็นวิธีที่ง่ายที่สุด แต่ก็อาจไม่ใช่วิธีที่ดีที่สุดและถูกต้องที่สุด ในทางที่ดี คุณจะต้องวางข้อมูลทั้งหมดบนเว็บไซต์และในทุกส่วนของเว็บไซต์ด้วยการเข้ารหัสเดียวกัน! และหากมีหลายหน้าในการเข้ารหัสที่แตกต่างกัน จะเป็นการดีกว่าถ้าอัปเดตข้อมูลในนั้นโดยแปลงข้อความทั้งหมดเป็นการเข้ารหัสที่ต้องการ

สถานการณ์ที่สอง

ดังที่คุณทราบเมื่อสร้างเพจ ไซต์ส่วนใหญ่จะเลือกส่วนหนึ่งของข้อมูลจากฐานข้อมูล เช่น MySQL (หากไซต์เขียนด้วย PHP) บ่อยครั้ง, เมื่อถ่ายโอนไซต์จากโฮสต์หนึ่งไปยังอีกโฮสต์หนึ่ง ปัญหาอาจเกิดขึ้นเนื่องจากการเข้ารหัสที่ไม่ตรงกันระหว่างข้อมูลที่จัดเก็บไว้ในฐานข้อมูล MySQL และข้อมูลที่จัดเก็บ เช่น ในเทมเพลตไซต์โดยตรง- ดังนั้นสถานการณ์อาจเกิดขึ้นได้ว่าเมื่อสร้างหน้าหนึ่งหน้าอาจมีข้อมูลในการเข้ารหัสที่แตกต่างกัน นี่อาจเป็นหนึ่งในข้อผิดพลาดในการเข้ารหัสที่ร้ายแรงที่สุดที่เป็นไปได้บนเว็บไซต์ และควรได้รับการแก้ไขทันที มิฉะนั้นอาจเกิดปัญหาเพิ่มเติมในภายหลังเมื่อกรอกและแก้ไขไซต์

การแก้ไขข้อขัดแย้งกับข้อมูลที่จัดเก็บไว้ในฐานข้อมูลทำได้โดยการตั้งค่าการเข้ารหัสอย่างชัดเจนอย่างถูกต้องเมื่อเชื่อมต่อกับฐานข้อมูลและก่อนดึงข้อมูลจากฐานข้อมูล ตัวอย่างเช่น หากข้อมูลบนเว็บไซต์ของเราถูกจัดเก็บในการเข้ารหัส windows-1251 เราจะต้องอ่านข้อมูลจากฐานข้อมูลในการเข้ารหัสเดียวกัน เมื่อต้องการทำเช่นนี้ หลังจากเชื่อมต่อกับฐานข้อมูลโดยใช้ฟังก์ชัน PHP mysql_connect() (หรือ mysql_pconnect()) ให้เรียกใช้แบบสอบถาม SQL ต่อไปนี้:

mysql_query("ตั้งค่าชื่อ cp1251");

คำขอนี้จะบอกเซิร์ฟเวอร์ฐานข้อมูล MySQL ว่าข้อมูลทั้งหมดถูกเก็บไว้และจะต้องส่งในการเข้ารหัส cp1251 (นี่คือชื่อการเข้ารหัสที่ใช้ใน MySQL แทนที่จะเป็นชื่อที่กล่าวถึงก่อนหน้านี้ windows-1251 ซึ่งใช้เมื่อส่งข้อมูล HTML)


ฉันใช้เวลาไม่กี่ชั่วโมงที่ผ่านมาบนเว็บไซต์ของฉันเพื่อทดสอบ HTML 4.01 Strict และฉันก็ทำสำเร็จจริงๆ แต่มีคำเตือนอีกอย่างหนึ่งที่ดูเหมือนฉันจะกำจัดไม่ได้ คำเตือน:

การเข้ารหัสอักขระไม่ตรงกัน!

การเข้ารหัสอักขระที่ระบุในส่วนหัว HTTP (iso-8859-1) แตกต่างจากค่าในองค์ประกอบ (utf-8) ฉันจะใช้ค่าจากส่วนหัว HTTP (iso-8859-1) สำหรับการยืนยันนี้

สำหรับข้อมูลทั่วไปเกี่ยวกับวิธีเปลี่ยนส่วนหัวชุดอักขระในสแต็กเครือข่ายต่างๆ โปรดดูที่ http://www.w3.org/International/O-HTTP-charset


2018-05-25 13:30

เซิร์ฟเวอร์ทำเครื่องหมายเอกสารอย่างชัดเจนว่าเป็น ISO-8859-1 ในส่วนหัว HTTP ลองบันทึก default.html โดยใช้การเข้ารหัส UTF-8 โดยใช้โปรแกรมแก้ไขที่เหมาะสม


2018-05-25 03:07

โอเค ฉันคิดวิธีแก้ปัญหาของฉันได้บางส่วนแล้ว เนื่องจากเป็นเพียงไฟล์ default.html ที่ทำให้เกิดคำเตือน ฉันจึงสันนิษฐานว่าเซิร์ฟเวอร์กำลังทำอะไรพิเศษกับมันเนื่องจากชื่อของมัน ดังนั้นฉันจึงสร้างไฟล์ home.html ใหม่ที่มีเนื้อหาเหมือนกับไฟล์ default.html และชี้ไฟล์ .htaccess ไปยังไฟล์ใหม่ (ดูบรรทัดที่ 3 ด้านล่าง)

# ใช้ PHP5 เป็นค่าเริ่มต้น แอปพลิเคชัน AddHandler/x-httpd-php5 .php DirectoryIndex home.html AddDefaultCharset UTF-8

วิธีนี้แก้ไขปัญหาได้และตอนนี้ไฟล์ทั้งหมดได้รับการยอมรับว่าเป็น UTF-8 ฉันยังไม่แน่ใจว่าเซิร์ฟเวอร์กำลังทำอะไรกับไฟล์ default.html หรือการตั้งค่าเกี่ยวข้องกับเรื่องนี้อย่างไร แต่เมื่อปัญหาของฉันหายไป ฉันจะลืมมันไป

ในบทความนี้ ฉันจะพยายามจุด "i" ทั้งหมด (รวมถึง "i's") เมื่อต้องเลือกการเข้ารหัสสำหรับหน้า HTML ที่ถูกสร้างขึ้น

เมื่อฉันเริ่มสร้างเว็บไซต์ครั้งแรก ฉันประสบปัญหากับการเข้ารหัสเหล่านี้อยู่ตลอดเวลา คุณบันทึกหน้า HTML อัปโหลดไปยังเซิร์ฟเวอร์ เปิด ปัง และยังมีเรื่องไร้สาระอยู่บ้าง เอาล่ะ สวัสดี เรามาถึงแล้ว

หรือในสภาพแวดล้อมการแก้ไขข้อบกพร่อง (เช่น สภาพแวดล้อมการพัฒนาในพื้นที่ "") ทุกอย่างเรียบร้อยดี แต่จากการโฮสต์อีกครั้ง พวกเขาไอ้สารเลวกำลังมองมาที่ฉันอย่างโจ่งแจ้ง

มีอาการปวดมากกับเครื่องยนต์ ทันใดนั้น ด้วยเหตุผลบางอย่างที่ไม่ทราบสาเหตุ ตัวอักษรรัสเซียพื้นเมืองก็กลายเป็น...

ตอนนี้เราจะจัดการกับเรื่องนี้โดยละเอียดแล้วคุณจะรู้ชัดเจน การเข้ารหัสใดที่จะบันทึกหน้า HTMLและ ผ่านเครื่องมืออะไร.

เพื่อเสริมสร้างความเข้าใจร่วมกัน เรามากำหนดแนวคิดกันดีกว่า การเข้ารหัส- ดังนั้น, การเข้ารหัสเป็นตารางโต้ตอบระหว่างรหัสเครื่องและตัวอักษร มีลำดับสัญลักษณ์เครื่องบางอย่างที่คอมพิวเตอร์อัจฉริยะจะแทนที่ด้วยตัวอักษรที่เราเข้าใจตามตารางรหัสที่เลือก

ในช่วงทศวรรษที่ 90 ของศตวรรษที่ผ่านมา (ช่างเป็นสมัยโบราณและฉันยังจำปฏิทินปี 1991 บนผนังได้) มีการเข้ารหัส 4 รายการสำหรับพีซีและอีกรายการหนึ่งสำหรับ Mac โชคชะตาที่น่าขันก็คือในการเข้ารหัสทั้งหมดนี้ อักขระละตินถูกจับคู่กับรหัสเครื่องโดยใช้อัลกอริธึมเดียวกัน แต่สำหรับตัวอักษรซีริลลิก การเข้ารหัสแต่ละรายการก็มีความคิดเห็นของตัวเอง

ความสับสนทั้งหมดนี้นำไปสู่การปรากฏตัวของ krakozyabrs เช่น ถ้าคำว่า " คำถาม" พิมพ์ในการเข้ารหัส windows-1251 แสดงเป็นการเข้ารหัส KOI8-R คุณจะได้คำว่า " บีนพยา».

ขอบคุณพระเจ้า ยุค 90 อยู่ข้างหลังเรามากแล้ว และจากโค้ดหลอกๆ ห้าโค้ด เหลือเพียงโค้ดปกติอีก 2 อันเท่านั้น แต่นี่ก็เพียงพอแล้วสำหรับผู้ดูแลเว็บมือใหม่ที่จะหลงทางในต้นสนสองต้น ไม่เป็นไร ไม่ต้องกังวล ตอนนี้ฉันจะพาคุณออกจากป่านี้!

ปัจจุบันเป็นทางเลือกสำหรับ การเข้ารหัสเอกสาร HTMLอยู่ระหว่าง windows-1251 และ utf-8 และตอนนี้ความสนใจ: utf-8 นั้นสมบูรณ์ยิ่งขึ้น ทรงพลังยิ่งขึ้น และอนาคตก็อยู่กับมัน ดังนั้นเราจะบันทึกไฟล์ HTML ของเราเป็น utf-8

ฉันจะปรับคำพูดของฉัน;) UTF-8 มีอักขระเช่น . และใน windws-1251 แทนที่จะเป็นสัญลักษณ์เหล่านี้ นี่คือ: > - และใน utf-8 จะมีเครื่องหมาย "ยูโร" utf-8 ยังช่วยให้คุณสามารถรวมอักขระเฉพาะต่างๆ ที่ใช้ในภาษาต่างๆ เช่น จอร์เจีย ฮิบรู จีน ญี่ปุ่น ไว้ในไฟล์ HTML เดียว และยัง utf-8ในการเข้ารหัส HTML- นี่เป็นกฎของมารยาทที่ดี

ฉันหวังว่าฉันจะโน้มน้าวคุณและคุณจะใช้ Unicode (อย่างไรก็ตาม “utf-8” และ “Unicode” เป็นคำพ้องความหมาย หรือให้แม่นยำยิ่งขึ้น utf-8 เป็นหนึ่งในการเข้ารหัสของกลุ่ม Unicode ซึ่งมี ได้รับความนิยมในหมู่นักพัฒนาเว็บ)

ตอนนี้เรามาดูเครื่องมือแปลงรหัสไฟล์ที่ฉันแนะนำให้คุณใช้อย่างละเอียดยิ่งขึ้นผู้อ่านที่รัก

เครื่องมือสำหรับการทำงานกับการเข้ารหัสไฟล์ HTML

จริงๆแล้วมีเพียงสามคนเท่านั้น:

  • พีเอสแพด. โปรแกรมแก้ไขข้อความฟรี ที่ฉันชื่นชอบ
  • - โปรแกรมแก้ไขข้อความที่ดีและฟรีอีกตัวหนึ่ง
  • ดรีมวีฟเวอร์ คุณคุ้นเคยกับ Dreamweaver จากไฟล์.

เราโหลดไฟล์ HTML บางส่วนลงใน PSPadและเราจะเข้าใจได้อย่างไรว่าหัวข้อทดลองที่โหลดมีการเข้ารหัสประเภทใด พูดง่ายๆ ก็คือ ทุกอย่างถูกเขียนไว้อย่างชัดเจนในแถบสถานะ (ด้านล่าง)

เปิดการเข้ารหัสไฟล์ HTML windows-1251

ตอนนี้ เมื่อสร้างเอกสาร HTML ใหม่ มาดูแลการเข้ารหัสกัน

มาดูเมนูโปรดกันดีกว่า พีเอสแพด- เรามีความสนใจในรายการ รูปแบบ- ในนั้นเราจะทำเครื่องหมายที่ช่องถัดจากการเข้ารหัส utf-8

ดังนั้นการเข้ารหัสไฟล์ในอนาคตจึงเป็น windows-1251

ตอนนี้เกี่ยวกับวิธีการ เปลี่ยนการเข้ารหัสไฟล์ HTML- ใช่ มันง่ายมาก:

คุณต้องคลิกที่การเข้ารหัสที่ต้องการในรายการเมนู รูปแบบและการเข้ารหัสจะเปลี่ยนไป หลังจากนั้นให้บันทึกไฟล์ รีโค้ด งานก็เสร็จสิ้น

เกี่ยวกับ กระดาษจดบันทึก++ทุกอย่างคล้ายกับสถานการณ์ที่อธิบายไว้ข้างต้นมาก ในการทำงานกับการเข้ารหัสเท่านั้นคุณต้องใช้รายการเมนู การเข้ารหัส

ข้อแตกต่างเพียงอย่างเดียวคือในกรณีของ Notepad++ รายการเมนูจะปรากฏขึ้นซึ่งออกแบบมาเป็นพิเศษสำหรับการแปลงการเข้ารหัส แปลง..- (ในความคิดของฉันไม่จำเป็น ทุกอย่างจะง่ายกว่าบน PSPad และนั่นคือเหตุผลที่ฉันใช้มัน) ดังนั้น สิ่งเหล่านี้คือสิ่งที่คุณต้องคลิกหากคุณต้องการเปลี่ยนการเข้ารหัสของไฟล์ HTML ของเรา

เหนือสิ่งอื่นใด เมื่อบันทึกเป็น utf-8 เรามีทางเลือก: ไม่มี BOMหรือ ด้วย BOM- เราในฐานะผู้ดูแลเว็บจำเป็นต้องใช้การเข้ารหัส UTF-8 (ไม่มี BOM).

นี่คือสิ่งที่ Wikipedia จะตอบคำถาม “BOM คืออะไร”

ในการกำหนดรูปแบบการแสดง Unicode ในไฟล์ข้อความ มีการใช้เทคนิคโดยเขียนอักขระ U+FEFF (พื้นที่ไม่แบ่งความกว้างเป็นศูนย์) หรือที่เรียกว่า Byte Order Mark (BOM) ที่จุดเริ่มต้นของข้อความ . เมธอดนี้สร้างความแตกต่างระหว่าง UTF-16LE และ UTF-16BE เนื่องจากไม่มีอักขระ U+FFFE บางครั้งก็ใช้เพื่ออ้างถึงรูปแบบ UTF-8 แม้ว่าแนวคิดเรื่องลำดับไบต์จะใช้ไม่ได้กับรูปแบบนี้ก็ตาม

หากคุณอ่านข้อความข้างต้น 10 ครั้งแล้วเกาหัว คุณจะเข้าใจได้ชัดเจนว่า: สำหรับ utf-8 BOM เราไม่ต้องการ- นอกจากนี้ หากคุณบันทึกไฟล์ด้วยสคริปต์ php ในการเข้ารหัส utf-8 พร้อม BOMจากนั้นมันจะไม่ทำงานเพราะตัวจัดการจะไม่เข้าใจว่าเรื่องไร้สาระประเภทใดที่เขียนไว้ที่จุดเริ่มต้นของไฟล์สคริปต์ (ฉันหมายถึงพื้นที่ไม่แตกที่มีความกว้างเป็นศูนย์)

เอาล่ะ สิ่งที่เหลืออยู่คือการดูให้ละเอียดยิ่งขึ้น ดรีมวีฟเวอร์.

เมื่อสร้างไฟล์ใหม่ ควรคำนึงถึงว่าไฟล์นั้นจะถูกสร้างขึ้นด้วยการเข้ารหัสใด เมื่อต้องการทำเช่นนี้ในหน้าต่างสำหรับสร้างเอกสารใหม่ ไฟล์ → ใหม่ (Ctrl+N)ใช้ปุ่ม การตั้งค่า...

และดูสิ่งที่ตั้งค่าเป็นการเข้ารหัสเริ่มต้น:

การเข้ารหัสเริ่มต้นของไฟล์ HTML ที่สร้างขึ้นใน Dreamweaver

แปลงรหัสไฟล์ HTML ที่เปิดใน Dreamweaverเป็นไปได้ในการสนทนา คุณสมบัติของหน้าซึ่งเปิดจากเมนู แก้ไขคุณสมบัติหน้า (Ctrl + J)

เลือกการเข้ารหัสที่ต้องการ กด ตกลงเพียงเท่านี้ งานการแปลงรหัสก็เสร็จสมบูรณ์ (แต่ BOM ยังไม่จำเป็น ไม่ต้องทำเครื่องหมายในช่อง)

การตรวจจับการเข้ารหัสเบราว์เซอร์

ดังนั้นไฟล์ HTML ของเราจึงถูกบันทึกในการเข้ารหัสที่เราเลือก ตอนนี้เรามาดูคำถาม: เบราว์เซอร์ทราบเกี่ยวกับการเข้ารหัสที่ใช้ในไฟล์ HTML ที่กำหนดได้อย่างไร

มีสามตัวเลือกที่นี่:

1. เราเองบอกเบราว์เซอร์ว่าการตั้งค่าการเข้ารหัสสำหรับไฟล์ HTML นี้คืออะไรทำได้โดยใช้แท็ก META

ตัวอย่างข้างต้นแนะนำให้เบราว์เซอร์ทราบว่าไฟล์ HTML ที่ดาวน์โหลดมาถูกบันทึกในการเข้ารหัส utf-8.

หากไฟล์ HTML ถูกบันทึกในการเข้ารหัส windows-1251 ดังนั้น:

อย่างไรก็ตามเมื่อแปลงไฟล์อย่าลืมเปลี่ยนคำสั่งในแท็ก META เป็นคำสั่งปัจจุบัน เมื่อเปลี่ยนการเข้ารหัส Dreamweaver จะดำเนินการนี้โดยอัตโนมัติ แต่ในโปรแกรมแก้ไขข้อความอื่นๆ คุณต้องจับคู่การเข้ารหัสที่ใช้และคำสั่ง META tag ด้วยตัวคุณเอง

HTML ที่สมบูรณ์มีลักษณะดังนี้ (ฉันอ้างอิงเพื่อทำความเข้าใจคำถาม “แท็ก META อยู่ที่ไหนพร้อมคำสั่งการเข้ารหัสที่ระบุ” โปรดใส่ใจกับบรรทัดที่ 4):

เอกสารที่ไม่มีชื่อ อืม ฯลฯ

2. การใช้ไฟล์ .htaccessบางครั้งเซิร์ฟเวอร์จะบังคับส่วนหัวสำหรับไฟล์ HTML ที่ดาวน์โหลด และแจ้งให้เบราว์เซอร์ทราบถึงการเข้ารหัสเริ่มต้น ในกรณีนี้ เบราว์เซอร์ไม่ได้สนใจคำสั่งในแท็ก META แต่จะแสดงไฟล์ HTML ในการเข้ารหัสที่เซิร์ฟเวอร์รายงาน เพื่อให้ดาวน์โหลดไฟล์ในการเข้ารหัสที่คุณต้องการ (บ่อยครั้งที่โฮสติ้งบังคับให้คุณระบุการเข้ารหัส windows-1251) ไฟล์ชื่อ “.htaccess” จะถูกสร้างขึ้นในรูทของไดเร็กทอรีโฮสติ้ง

ไฟล์นี้มีไว้สำหรับการกำหนดค่าเซิร์ฟเวอร์เพิ่มเติม ผลกระทบของคำสั่ง .htaccess ใช้กับไฟล์และไดเรกทอรีย่อยทั้งหมดที่อยู่ในไดเรกทอรีที่คุณบันทึกไฟล์ .htaccess

คุณสามารถสร้างไฟล์นี้ได้ เช่น ใน Total Commander โดยการกดปุ่มลัด กะ+F4และระบุชื่อไฟล์ที่สร้างขึ้น .htaccess- ถัดไป โปรแกรมแก้ไขข้อความจะระบุคำสั่งสำหรับการตั้งค่าการเข้ารหัสเริ่มต้นเพิ่มเติม

สำหรับไฟล์ HTML ที่เข้ารหัส utf-8ใน .htaccess คุณต้องเขียนหนึ่งบรรทัด:

เพิ่มDefaultCharset UTF-8

สำหรับไฟล์ HTML ในการเข้ารหัส Windows-1251:

เพิ่มค่าเริ่มต้นCharsetWindows-1251

หากโฮสติ้งของคุณฉลาดหลักแหลมและไม่ใส่ใจกับคำสั่งเหล่านี้ คุณสามารถลอง:

Charsetdisable เมื่อ AddDefaultCharset Off

หากไม่ได้ผล เพียงถามผู้ให้บริการโฮสต์ของคุณว่าคุณควรทำอย่างไรเพื่อปิดใช้งานการเข้ารหัสเริ่มต้น :) ทั้งหมดนี้ขึ้นอยู่กับการตั้งค่าเซิร์ฟเวอร์เฉพาะของผู้ให้บริการโฮสติ้ง

3. คำสั่ง PHP ระบุการเข้ารหัสเริ่มต้นในไฟล์ที่ต้องแสดงในการเข้ารหัสที่ต้องการแม้ว่าจะมีการตั้งค่าเซิร์ฟเวอร์ของผู้ให้บริการโฮสต์ก็ตาม แต่คำสั่งที่มีรหัส php จะถูกระบุที่จุดเริ่มต้น:

รหัส php นี้จะส่งส่วนหัวของเซิร์ฟเวอร์ที่ระบุการเข้ารหัสเริ่มต้นของเบราว์เซอร์ ในตัวอย่างข้างต้น การเข้ารหัส utf-8 จะถูกใช้เพื่อแสดงเพจ

โดยปกติแล้วไม่มีเคล็ดลับในการตั้งค่าเซิร์ฟเวอร์ของผู้ให้บริการโฮสติ้งในการจัดการกับเรื่องที่สนใจดังกล่าว

ฉันต้องการทราบว่าเพื่อให้เซิร์ฟเวอร์ประมวลผลคำสั่ง PHP ไฟล์ html จะต้องมีนามสกุล .php(เช่นindex.php)

คุณมีคำถามอื่นๆ เกี่ยวกับการเข้ารหัสหรือไม่ เขียนในความคิดเห็น เราจำเป็นต้องแก้ไขปัญหาเหล่านี้ทันทีและตลอดไป :)

วลาด เมอร์เซวิช

เมตาแท็กใช้เพื่อจัดเก็บข้อมูลสำหรับเบราว์เซอร์และเครื่องมือค้นหา ตัวอย่างเช่น เครื่องมือค้นหาจะเข้าถึงเมตาแท็กเพื่อรับคำอธิบายเว็บไซต์ คำสำคัญ และข้อมูลอื่นๆ

เมตาแท็กสำหรับเครื่องมือค้นหา

มีความเห็นในหมู่นักพัฒนาเว็บไซต์ว่าเมตาแท็กที่เขียนอย่างถูกต้องช่วยให้คุณสามารถขึ้นสู่อันดับต้น ๆ ของเครื่องมือค้นหาได้

เมตาแท็กสองแท็กได้รับการออกแบบมาโดยเฉพาะสำหรับเครื่องมือค้นหา: คำอธิบายและคำหลัก เว็บมาสเตอร์บางรายได้เพิ่มคำหลักลงในส่วนคำหลักที่ไม่เกี่ยวข้องกับหัวข้อของเว็บไซต์ แต่ถึงกระนั้นก็ประสบความสำเร็จในหมู่ผู้เข้าชมเครื่องมือค้นหา อย่างไรก็ตาม หลังจากนั้นไม่นาน เสิร์ชเอ็นจิ้นก็เรียนรู้ที่จะจัดการกับปรากฏการณ์นี้ และตรวจสอบเนื้อหาของหน้าเว็บว่าสอดคล้องกับคำหลักที่ระบุหรือไม่

หลักการบางประการที่เกี่ยวข้องกับเมตาแท็ก:

  • ไม่รวมคำหลักที่ไม่มีอยู่ในหน้าเว็บของคุณ
  • อย่าใช้คำหลักซ้ำ
  • ใช้เมตาแท็กตามวัตถุประสงค์ที่ต้องการ
  • ทำให้คำอธิบายและรายการคำหลักแตกต่างกันในแต่ละหน้าของเว็บไซต์โดยคำนึงถึงเนื้อหา

คำอธิบาย

เครื่องมือค้นหาส่วนใหญ่จะแสดงเนื้อหาของช่องคำอธิบาย (ตัวอย่างที่ 1) เมื่อแสดงผลการค้นหา

หากไม่มีแท็กนี้บนหน้า เครื่องมือค้นหาก็จะแสดงรายการคำแรกที่พบในหน้า ซึ่งตามกฎแล้วจะไม่เกี่ยวข้องกับหัวข้อมากนัก

คำอธิบาย

เว็บไซต์เกี่ยวกับ HTML และการสร้างเว็บไซต์

คำหลัก

เมตาแท็กนี้มีวัตถุประสงค์เพื่ออธิบายคำหลักที่ปรากฏบนเพจ (ตัวอย่างที่ 2) แต่ด้วยเหตุนี้การกระทำของผู้ที่ต้องการขึ้นสู่อันดับต้น ๆ ของเครื่องมือค้นหาด้วยวิธีการใด ๆ ที่จำเป็นจึงน่าอดสูไปแล้ว

เว็บไซต์เกี่ยวกับ HTML และการสร้างเว็บไซต์

ตัวอย่างที่ 2: การใช้คำหลัก

HTML, META, เมตาแท็ก, แท็ก, เครื่องมือค้นหา

สามารถแสดงรายการคำหลักโดยคั่นด้วยการเว้นวรรคหรือเครื่องหมายจุลภาค เครื่องมือค้นหาจะแปลงรายการเป็นรูปแบบที่ใช้



กำลังโหลดหน้าอัตโนมัติ

หากต้องการดาวน์โหลดเอกสารใหม่โดยอัตโนมัติหลังจากช่วงระยะเวลาหนึ่ง ให้ใช้คำสั่ง http-equiv="refresh" (ตัวอย่างที่ 3)

เบราว์เซอร์จะเข้าใจว่ารายการนี้ต้องรอ 5 วินาที จากนั้นโหลดหน้าใหม่ที่ระบุในพารามิเตอร์ URL ในกรณีนี้คือลิงก์ไปยังเว็บไซต์เว็บไซต์

เมตาแท็กนี้ช่วยให้คุณสร้างการเปลี่ยนเส้นทางไปยังไซต์อื่นได้ หากไม่มีการระบุ URL เพจปัจจุบันจะรีเฟรชโดยอัตโนมัติหลังจากผ่านไปตามจำนวนวินาทีที่ระบุในแอตทริบิวต์เนื้อหา

การเข้ารหัส

เบราว์เซอร์จะเข้าใจว่ารายการนี้ต้องรอ 5 วินาที จากนั้นโหลดหน้าใหม่ที่ระบุในพารามิเตอร์ URL ในกรณีนี้คือลิงก์ไปยังเว็บไซต์เว็บไซต์

หากต้องการบอกเบราว์เซอร์ว่าอักขระใดในหน้าเว็บที่เข้ารหัส คุณต้องตั้งค่าพารามิเตอร์



หากไม่มีการระบุการเข้ารหัส เบราว์เซอร์จะพยายามกำหนดประเภทของอักขระที่ใช้ในเอกสารและเลือกการเข้ารหัสที่จำเป็นโดยอัตโนมัติ

เบราว์เซอร์อาจไม่รู้จักภาษาของหน้าเว็บอย่างถูกต้องเสมอไป และในบางกรณีจะแนะนำการเข้ารหัสภาษาเวียดนามแทนซีริลลิก ด้วยเหตุนี้ จึงควรรวมบรรทัดที่ให้ไว้เสมอจะดีกว่า อย่างไรก็ตาม มีบางสถานการณ์ที่การระบุการเข้ารหัสอาจทำให้เกิดอันตรายได้ ตัวอย่างเช่น เว็บเซิร์ฟเวอร์จะใช้การแปลงข้อมูลใน KOI-8 โดยอัตโนมัติ และเบราว์เซอร์เมื่อพบพารามิเตอร์ charset=windows-1251 จะแปลงข้อความเป็นการเข้ารหัส Windows ส่งผลให้มีการเปลี่ยนอักขระสองครั้ง จึงไม่ง่ายเลยที่จะอ่านข้อความดังกล่าว โชคดีที่ปัญหาดังกล่าวกลายเป็นเรื่องในอดีตไปแล้ว ไม่ว่าในกรณีใด ก็สามารถระบุและแก้ไขได้อย่างง่ายดายในระดับเซิร์ฟเวอร์ หนึ่งในปัญหาที่พบบ่อยที่สุดที่มือใหม่ต้องเผชิญเว็บมาสเตอร์ (และไม่ใช่แค่มือใหม่) สิ่งนี้ปัญหาเกี่ยวกับการเข้ารหัสบนเว็บไซต์ - สำหรับฉันมันจะปรากฏขึ้นตลอดเวลาเมื่อสร้างเว็บไซต์ "อับราคาดาบรา “แต่โชคดีที่ฉันรู้ดีว่าจะแก้ไขปัญหานี้อย่างไร ดังนั้นฉันจึงจัดทุกอย่างให้เรียบร้อยภายในไม่กี่วินาที และในบทความนี้ ฉันจะพยายามสอนคุณอย่างรวดเร็วเช่นกัน.

แก้ไขปัญหาที่เกี่ยวข้องกับการเขียนโค้ดบนเว็บไซต์ วินโดว์-1251สิ่งแรกที่ควรสังเกตก็คือปัญหาทั้งหมดเกี่ยวกับรูปลักษณ์ของ "abracadabra" นั้นเกี่ยวข้องกับความไม่ตรงกันระหว่างการเข้ารหัสเอกสารและการเข้ารหัสที่เบราว์เซอร์กำหนด สมมติว่ามีเอกสารเข้า แต่ด้วยเหตุผลบางอย่างที่เบราว์เซอร์แสดง UTF-8

- และที่มาของความคลาดเคลื่อนดังกล่าวอาจมีสาเหตุดังต่อไปนี้

เหตุผลแรก เมตาแท็กเขียนไม่ถูกต้องประเภทเนื้อหา

- โปรดระวัง ควรมีการเข้ารหัสที่ใช้เขียนเอกสารของคุณเสมอ

เหตุผลที่สอง กระดาษจดบันทึก++ดูเหมือนว่าเมตาแท็กจะถูกเขียนตามที่คุณต้องการ และเบราว์เซอร์จะแสดงสิ่งที่คุณต้องการอย่างแน่นอน แต่ด้วยเหตุผลบางประการ ยังคงมีปัญหากับการเข้ารหัส ผู้ร้ายในที่นี้เกือบจะแน่นอนว่าเอกสารนั้นมีการเข้ารหัสที่แตกต่างกัน ถ้าคุณทำงานใน จากนั้นที่มุมขวาล่างจะมีชื่อการเข้ารหัสของเอกสารปัจจุบัน (เช่นแอนซี่ แต่ด้วยเหตุผลบางอย่างที่เบราว์เซอร์แสดง- หากคุณใส่เมตาแท็ก จากนั้นที่มุมขวาล่างจะมีชื่อการเข้ารหัสของเอกสารปัจจุบัน (เช่นและตัวเอกสารเองก็เขียนอยู่ในนั้น แต่ด้วยเหตุผลบางอย่างที่เบราว์เซอร์แสดงจากนั้นทำการแปลงเป็น (ผ่านเมนู"การเข้ารหัส "และจุด"").

แปลงเป็น UTF-8 โดยไม่มี BOM

เหตุผลที่สาม

เหตุผลที่สี่ และสุดท้ายเหตุผลยอดนิยมประการสุดท้ายก็คือ- ขั้นแรก ตรวจสอบให้แน่ใจว่าตารางและฟิลด์ทั้งหมดของคุณเขียนด้วยการเข้ารหัสเดียวกัน ซึ่งตรงกับการเข้ารหัสของส่วนที่เหลือของไซต์ หากวิธีนี้ไม่ได้ผล ให้เรียกใช้คำขอต่อไปนี้ทันทีหลังจากเชื่อมต่อสคริปต์:

ตั้งชื่อ "utf8"

แทนที่จะเป็น " utf8" อาจมีการเข้ารหัสที่แตกต่างกัน หลังจากนั้น ข้อมูลทั้งหมดจากฐานข้อมูลควรออกมาในรูปแบบการเข้ารหัสที่ถูกต้อง

ในบทความนี้ ฉันหวังว่าฉันจะได้อธิบายอย่างน้อย 90% ของปัญหาเกี่ยวข้องกับการปรากฏตัวของ "พูดพล่อยๆ" บนไซต์- ตอนนี้คุณต้องจัดการกับปัญหายอดนิยมและเรียบง่ายเช่นการเข้ารหัสที่ไม่ถูกต้องในเวลาอันรวดเร็ว