ฉันใช้เวลาไม่กี่ชั่วโมงที่ผ่านมาบนเว็บไซต์ของฉันเพื่อทดสอบ 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 หรือการตั้งค่าเกี่ยวข้องกับเรื่องนี้อย่างไร แต่เมื่อปัญหาของฉันหายไป ฉันจะลืมมันไป
หากการเข้ารหัสไม่ถูกต้อง เว็บไซต์ทั้งหมดหรือบางส่วนจะแสดงเป็น "kryapozyablov" เช่น ตัวอักษรแปลกๆ ทำให้อ่านข้อความไม่ได้ สถานการณ์นี้อาจเกิดขึ้นได้หากมีการกำหนดค่าการเข้ารหัสเว็บเซิร์ฟเวอร์ไม่ถูกต้องหรือหากไม่มีการตั้งค่า พิจารณาตัวเลือกที่เป็นไปได้และวิธีแก้ปัญหา
การเข้ารหัสหน้า HTML ไม่ถูกต้อง
มาสร้างไฟล์ทดสอบกัน:
Sudo gedit /var/www/html/encoding.html
ลองคัดลอกลงไป:
มาเปิดไฟล์นี้ในเบราว์เซอร์กัน
อย่างที่คุณเห็น เบราว์เซอร์ตรวจพบการเข้ารหัสไม่ถูกต้อง:
มีหลายวิธีในการแก้ไขสถานการณ์นี้ เริ่มจากสิ่งที่ง่ายที่สุด - ระบุการเข้ารหัสสำหรับหน้าเว็บอย่างชัดเจน ซึ่งทำได้โดยใช้เมตาแท็ก ซึ่งจะต้องอยู่ภายในแท็ก ศีรษะ:
เพิ่มบรรทัดนี้ลงในไฟล์ทดสอบของเราเพื่อให้มีลักษณะดังนี้:
ทดสอบไฟล์เพื่อตรวจสอบการเข้ารหัส
ดังที่เราเห็นในภาพหน้าจอต่อไปนี้ ปัญหาได้รับการแก้ไขแล้ว:
หากการเข้ารหัสไฟล์ของคุณแตกต่างไปจากนี้ UTF-8แล้วแทนที่ด้วย วินโดว์-1251หรืออันที่ตรงกับการเข้ารหัสของหน้าเว็บ หากต้องการเรียนรู้วิธีตรวจจับการเข้ารหัสไฟล์ โปรดดู
นี่เป็นวิธีที่ง่ายที่สุดในการแก้ไขปัญหาการเข้ารหัส โดยไม่ต้องเปลี่ยนการตั้งค่าเซิร์ฟเวอร์
เราจะคืนไฟล์ทดสอบของเรากลับสู่สถานะดั้งเดิมและศึกษาวิธีระบุการเข้ารหัสต่อไป
ถ้าเป็นไฟล์ .htaccessเปิดใช้งานโดยการตั้งค่า Apache ไฟล์เหล่านี้สามารถใช้เพื่อระบุการเข้ารหัสของหน้าที่ส่งโดยเว็บเซิร์ฟเวอร์ เพื่อเปิดใช้งานการรองรับไฟล์ .htaccessในไฟล์กำหนดค่า Apache ( /etc/apache2/apache2.conf) ค้นหากลุ่มของเส้น
และแทนที่มัน
AllowOverride ไม่มี
อนุญาตแทนที่ทั้งหมด
หลังจากนี้ เซิร์ฟเวอร์จะต้องรีสตาร์ท
Sudo systemctl รีสตาร์ท apache2.service
ไฟล์ .htaccessจะต้องอยู่ในไดเรกทอรีเดียวกันกับไซต์ เว็บไซต์ของฉันโฮสต์อยู่ในไดเร็กทอรีรากของเว็บเซิร์ฟเวอร์ หากคุณมีเหมือนกันตอนนี้อยู่ในโฟลเดอร์แล้ว /var/www/html/สร้างไฟล์ .htaccessและเพิ่มคำสั่งลงไป เพิ่มDefaultCharsetหลังจากนั้นระบุการเข้ารหัสที่ต้องการ ตัวอย่าง
เพิ่มDefaultCharset UTF-8
เพิ่มDefaultCharset windows-1251
คุณสามารถระบุการเข้ารหัสที่จะใช้กับไฟล์บางรูปแบบเท่านั้น:
AddCharset utf-8 .atom .css .js .json .rss .vtt .xml
ชุดของไฟล์สามารถเป็นอะไรก็ได้ เช่น:
AddCharset utf-8 .html .css .php .txt .js
ตัวเลือกถัดไปเป็นอีกทางเลือกหนึ่งและยังให้คุณตั้งค่าการเข้ารหัสสำหรับไฟล์บางประเภท โดยกำหนดให้ต้องเปิดใช้งาน mod_headers:
อีกตัวเลือกหนึ่งที่สามารถใช้ในไฟล์ได้เช่นกัน .htaccessเพื่อตั้งค่าการเข้ารหัส UTF-8:
IndexOptions +ชุดอักขระ=UTF-8
หากไซต์นั้นเป็น PHP คุณอาจต้องทำซ้ำการเข้ารหัสเพิ่มเติมด้วย php_value default_charset:
เพิ่มDefaultCharset windows-1251 php_value default_charset "cp1251"
แทนที่จะสร้างไฟล์ .htaccess คุณสามารถตั้งค่าการเข้ารหัสในไฟล์การกำหนดค่าเว็บเซิร์ฟเวอร์ได้ สำหรับ Apache CentOS/Fedora นี่คือไฟล์ httpd.conf และบน Debian/Ubuntu นี่คือไฟล์ apache2.conf เพิ่มบรรทัดต่อไปนี้เพื่อตั้งค่าการเข้ารหัสและรีสตาร์ทเว็บเซิร์ฟเวอร์เพื่อให้การเปลี่ยนแปลงมีผล:
เพิ่มDefaultCharset UTF-8
วิธีการตั้งค่าการเข้ารหัส UTF-8 ใน PHP
ในสคริปต์ PHP การเข้ารหัสถูกตั้งค่าเป็น ส่วนหัว, ตัวอย่างเช่น:
ส่วนหัว("ประเภทเนื้อหา: charset=utf-8");
โดยปกติแล้ว นอกจากการเข้ารหัสแล้ว ยังระบุประเภทเนื้อหาด้วย (ในตัวอย่าง ตัวเลือกสำหรับเพจ HTML):
Header("ประเภทเนื้อหา: text/html; charset=utf-8");
ตัวเลือกอื่นสำหรับฟีด RSS:
ส่วนหัว("ประเภทเนื้อหา: text/xml; charset=utf-8");
จำไว้ว่าฟังก์ชั่น ส่วนหัวจะต้องถูกเรียกก่อนที่จะส่งออกไปยังเบราว์เซอร์ มิฉะนั้น (หากมีการสร้างเอาต์พุตไปยังเบราว์เซอร์แล้ว) แสดงว่าส่วนหัวได้ถูกส่งไปแล้ว แน่นอนว่าในกรณีนี้ จะไม่สามารถเปลี่ยนแปลงได้อีกต่อไป หากข้อความแสดงข้อผิดพลาดถูกส่งไปยังเบราว์เซอร์ แสดงว่าส่วนหัวได้ถูกส่งไปแล้ว และการใช้ส่วนหัวจะทำให้เกิดข้อผิดพลาด หากต้องการตรวจสอบว่าได้ส่งส่วนหัวไปแล้วหรือไม่ ให้ใช้ headers_sent.
วิธีการที่อธิบายไว้จะใช้ได้ก็ต่อเมื่อสคริปต์ PHP สร้างเนื้อหาของหน้าโดยสมบูรณ์ คุณควรบันทึกหน้าคงที่ (เช่น html) ในการเข้ารหัส utf-8 เว็บเซิร์ฟเวอร์ส่วนใหญ่จะจดบันทึกการเข้ารหัสของไฟล์และเพิ่มส่วนหัวตามนั้น ที่จริงแล้ว การบันทึกไฟล์ PHP ในการเข้ารหัส utf-8 จะให้ผลลัพธ์เดียวกัน
การเข้ารหัสผลลัพธ์จากฐานข้อมูล MySQL ไม่ถูกต้อง
หากไซต์ของคุณประกอบด้วยส่วนที่คงที่ (เทมเพลต) และส่วนไดนามิกซึ่งสร้างขึ้นจากข้อมูลที่ได้รับจากฐานข้อมูล สถานการณ์อาจเกิดขึ้นเมื่อส่วนหนึ่งของไซต์มีการเข้ารหัสที่ถูกต้อง และส่วนอื่นของไซต์มีข้อผิดพลาด หนึ่ง. ในกรณีนี้การเปลี่ยนการตั้งค่าเว็บเซิร์ฟเวอร์ไม่มีประโยชน์ - เนื่องจากเหมือนกันบางส่วนของหน้าจะมีการเข้ารหัสที่ไม่ถูกต้อง
คุณต้องเริ่มต้นด้วยการกำหนดการเข้ารหัสตารางของคุณ คุณสามารถดูได้ phpMyAdmin:
ให้ความสนใจกับคอลัมน์ " การเปรียบเทียบ", รายการ " utf8_unicode_ci" หมายความว่ามีการใช้การเข้ารหัส UTF-8.
คุณสามารถเชื่อมต่อกับ MySQL DBMS และตรวจสอบการเข้ารหัสของตารางได้โดยไม่ต้องใช้ phpMyAdmin เมื่อต้องการทำสิ่งนี้:
Mysql -u รูท -p
หากคุณลืมชื่อฐานข้อมูล ให้รันคำสั่ง:
แสดงฐานข้อมูล;
สมมติว่าฉันต้องการค้นหาการเข้ารหัสสำหรับตารางในฐานข้อมูล information_schema
ใช้ information_schema;
หากคุณลืมชื่อตาราง ให้รัน:
แสดงคอลัมน์ทั้งหมดจาก table_name;
ตัวอย่างเช่น:
แสดงคอลัมน์ทั้งหมดจาก GLOBAL_STATUS
คุณจะเห็นสิ่งนี้:
ดูคอลัมน์ การเปรียบเทียบ- ในกรณีของฉันที่นั่น utf8_general_ciมันก็เหมือนกับ utf8_unicode_ci, การเข้ารหัส UTF-8- อย่างไรก็ตาม หากคุณไม่รู้ว่าการเข้ารหัสคืออะไร utf8_general_ci, utf8_unicode_ci, utf8mb4_general_ci, utf8mb4_unicode_ciและยังมีการเข้ารหัสใดให้เลือกสำหรับฐานข้อมูล MySQL แล้วลองดู
ตอนนี้เรารู้การเข้ารหัสแล้ว (ในกรณีของฉันคือ UTF-8) ทุกครั้งที่คุณเชื่อมต่อกับ MySQL DBMS คุณจะต้องดำเนินการสืบค้นตามลำดับ:
SET NAMES UTF8 SET CHARACTER SET UTF8 SET character_set_client = UTF8 SET character_set_connection = UTF8 SET character_set_results = UTF8
ใน PHP สามารถทำได้ดังนี้:
$this->mysqli = mysqli ใหม่($server, $username, $password, $basename); if ($this->mysqli->connect_error) ( $this->errorHandler_c->logError(1, "ข้อผิดพลาดในการเชื่อมต่อ (" . $this->mysqli->connect_errno . ") " . $this->mysqli->connect_error , $_SERVER ["REQUEST_URI"] ) $this->mysqli->query("SET NAMES UTF8"); $this->mysqli->query("SET CHARACTER SET UTF8"); $this->mysqli->query("SET character_set_client = UTF8"); $this->mysqli->query("SET character_set_connection = UTF8"); $this->mysqli->query("SET character_set_results = UTF8");
โปรดทราบว่า UTF8คุณต้องแทนที่ด้วยการเข้ารหัสที่ใช้กับตารางของคุณ
การเปลี่ยนการเข้ารหัสไฟล์
หากคุณตัดสินใจที่จะไปทางอื่นและแทนที่จะติดตั้งการเข้ารหัสใหม่ ให้เปลี่ยนการเข้ารหัสไฟล์ของคุณ จากนั้นดูที่บทความ “” โดยจะบอกวิธีค้นหาการเข้ารหัสไฟล์ปัจจุบัน และวิธีแปลงไฟล์เป็นการเข้ารหัสใดๆ (ไม่ใช่แค่ UTF-8)
วิธีค้นหาว่าเซิร์ฟเวอร์กำลังส่งการเข้ารหัสใด
หากคุณต้องการทราบว่าเว็บเซิร์ฟเวอร์มีการตั้งค่าการเข้ารหัสใด (ส่วนหัวจะส่งการเข้ารหัสใด) ให้ใช้คำสั่งต่อไปนี้:
URL ขด -s -o /dev/null -D /dev/stdout | grep -E "ชุดอักขระ"
ในนั้นแทน. URLใส่ที่อยู่จริงของไซต์ที่คุณกำลังตรวจสอบ หากไซต์ใช้ HTTPS ให้ระบุที่อยู่ไซต์พร้อมกับโปรโตคอล เป็นต้น
Curl https://softocracy.ru -s -o /dev/null -D /dev/stdout | grep -E "ชุดอักขระ"
การเข้ารหัสใดให้เลือกสำหรับเว็บไซต์
เพื่อให้หน้าเว็บไซต์ของคุณแสดงได้อย่างถูกต้องในทุกเบราว์เซอร์และบนอุปกรณ์ทุกประเภท คุณจะต้องดูแลการตั้งค่าการเข้ารหัสที่ถูกต้อง การไม่ปฏิบัติตามเงื่อนไขบางประการซึ่งเราจะกล่าวถึงโดยละเอียดในวันนี้อาจนำไปสู่ความจริงที่ว่าข้อความกลายเป็นชุดอักขระที่ไม่มีความหมายซึ่งอ่านไม่ออก (krakozyabry)
เหตุใดข้อความเส็งเคร็งจึงแสดงแทนข้อความปกติ
แต่ละหน้าในไซต์ของคุณต้องมีการเข้ารหัสเฉพาะ จำเป็นต้องแจ้งให้เบราว์เซอร์ทราบว่าการเข้ารหัสใดที่ใช้อยู่ในปัจจุบันโดยการส่งส่วนหัวพิเศษ ในส่วนหัวเหล่านี้ คุณต้องระบุการเข้ารหัสที่สอดคล้องกับที่คุณใช้ในเนื้อหาของเอกสารที่โพสต์บนเว็บไซต์ (บนหน้าต่างๆ)
เบราว์เซอร์สมัยใหม่สามารถกำหนดการเข้ารหัสเอกสารได้เองหากผู้ดูแลเว็บลืมระบุอย่างชัดเจน บางครั้งมันเกิดขึ้นว่า "ความคิดเห็น" ของเบราว์เซอร์กับความเป็นจริงเกิดความไม่สอดคล้องกัน ดังนั้นจึงมีชุดอักขระที่ไม่สามารถอ่านได้ ชุดเรื่องไร้สาระอาจมีรูปแบบที่แตกต่างกัน บางครั้งอาจเป็นเพียงสัญลักษณ์แปลก ๆ คล้ายกับอักษรอียิปต์โบราณ และบางครั้งก็เป็นเพียงคำถามหรือคำถามภายในเพชรสีดำ โดยทั่วไปแล้ว มันไม่สำคัญว่าเบราว์เซอร์จะแสดงไฟล์ประเภทไหน แต่สิ่งสำคัญคือคนไม่สามารถอ่านมันได้
หากคุณประสบปัญหาในการเข้ารหัสที่ระบุไม่ถูกต้องและเห็นสิ่งที่คุณไม่สามารถอ่านบนเว็บไซต์ของคุณได้ ก่อนอื่น ให้ใช้ตัวถอดรหัสพิเศษที่พัฒนาขึ้นในสตูดิโอของ Artemy Lebedev ในการดำเนินการนี้ เพียงคัดลอกข้อความที่คุณต้องการถอดรหัส วางลงในช่องพิเศษแล้วคลิก "ถอดรหัส" หากถอดรหัสสำเร็จ คุณจะเห็นข้อความที่อ่านได้แล้ว รวมถึงการเข้ารหัสดั้งเดิมและเส้นทางที่โปรแกรมต้องผ่านเพื่อแสดงผลลัพธ์
ทั้งหมดนี้จำเป็นสำหรับผู้ใช้ขั้นสูงซึ่งข้อมูลที่ได้รับสามารถช่วยได้ไม่ทางใดก็ทางหนึ่ง บางทีผลลัพธ์ของการกระทำของโปรแกรมอาจทำให้คุณมีความคิดและคุณจะรู้ว่าสิ่งไร้สาระในไซต์ของคุณมาจากไหนและแก้ไขสถานการณ์ได้อย่างรวดเร็ว และหากการยักย้ายไม่ได้บอกอะไรคุณเลย เรามาเริ่มกันเลยดีกว่า
วิธีเลือกการเข้ารหัสที่เหมาะสม
ในบทความนี้ เราจะไม่เจาะลึกว่ามีการเข้ารหัสประเภทใดบ้าง และมีความแตกต่างกันอย่างไร เนื่องจาก... เราไม่ต้องการให้ข้อมูลที่ไม่จำเป็นมากเกินไปทั้งตัวเราเองหรือคุณ และนี่ไม่ใช่กรณีเพื่อวัตถุประสงค์ของบทความในวันนี้ เป็นที่น่าสังเกตว่าในไซต์ภาษารัสเซียนั้นไม่มีประเด็นในการติดตั้งการเข้ารหัส windows-1251 ซึ่งได้รับการอธิบายอย่างละเอียดถี่ถ้วนในบทความ Wikipedia ที่ยอดเยี่ยม แม้ว่าข้อความทั้งหมดจะเขียนเป็นภาษารัสเซียโดยเฉพาะและจะไม่มีการรวมอักขระที่ไม่ได้มาตรฐานเข้าด้วยกัน แต่คุณเพียงแค่ต้องเลือกการเข้ารหัสสากล UTF-8 โดยยึดตามที่กำหนดโดยไม่ต้องยุ่งกับข้อมูลที่ไม่จำเป็น
ความจริงก็คือไม่มีประโยชน์ในการเลือกการเข้ารหัสสำหรับไซต์ของคุณที่รองรับเฉพาะอักขระจากภาษาสลาฟ เช่น รัสเซีย ยูเครน เบลารุส เซอร์เบีย มาซิโดเนีย และบัลแกเรีย เหตุใดจึงต้องจำกัดตัวเองตั้งแต่เริ่มต้นและลงโทษตัวเองต่อปัญหาที่อาจเกิดขึ้นในอนาคต คุณจะทำอย่างไรถ้าคุณต้องการแทรกอักขระที่ไม่รองรับ?
UTF-8 (จากรูปแบบการแปลง Unicode ภาษาอังกฤษ) เป็นรูปแบบการแปลง Unicode 8 บิตที่ได้รับการยอมรับทั่วโลกและได้รับการกำหนดมาตรฐานอย่างแม่นยำเพื่อหลีกเลี่ยงปัญหาที่เกี่ยวข้องกับการแสดงคำพูดที่ไม่มีความหมายและความสับสนกับข้อความที่อ่านไม่ได้ ซึ่งเราสามารถสรุปได้อย่างปลอดภัยว่าในกรณีนี้คุณต้องเลือกความชั่วร้ายที่ยิ่งใหญ่กว่าและนอนหลับอย่างสงบสุขโดยไม่ต้องเจาะลึกรายละเอียดเพราะทุกอย่างชัดเจนที่นี่ ดูขนาดของดาวพฤหัสบดีและดาวศุกร์เพื่อเปรียบเทียบ
วิธีพื้นฐานในการตั้งค่าการเข้ารหัสที่ถูกต้อง
บ่อยครั้งที่ปัญหาเกี่ยวกับการเข้ารหัสไซต์เกิดขึ้นไม่ใช่เพราะไม่ตรงตามเงื่อนไขที่เราจะบอกคุณ แต่ก็เพียงพอที่จะล้มเหลวในการตอบสนองเพียงหนึ่งเงื่อนไขเพื่อให้ข้อความบนไซต์ของคุณเริ่มแสดงไม่ถูกต้อง หลังจากที่คุณตั้งค่าการเข้ารหัสโดยใช้วิธีการทั้งหมดข้างต้น ปัญหาจะได้รับการแก้ไขด้วยความน่าจะเป็น 99.9% เราได้ข้อสรุปนี้จากประสบการณ์หลายปีในการทำงานกับเว็บไซต์บนแพลตฟอร์มโฮสติ้งต่างๆ โดยใช้ระบบการดูแลระบบและการตั้งค่าเซิร์ฟเวอร์ที่หลากหลาย
การเข้ารหัสใน .htaccess - AddDefaultCharset
ก่อนอื่นคุณต้องตั้งค่าการเข้ารหัสเริ่มต้นของทุกหน้าบนไซต์โดยใช้คำสั่ง htaccess ที่มีประโยชน์มาก - AddDefaultCharset ซึ่งแปลว่า "เพิ่ม DefaultCharset" อย่างแท้จริง ทำได้ง่ายมาก:
เพิ่มDefaultCharset UTF-8
หากคุณไม่รู้ว่ามันคืออะไร จากนั้นเพียงสร้างไฟล์ข้อความใน Notepad จากนั้นใช้ Total Commander เปลี่ยนชื่อเป็นไฟล์ที่ไม่มีชื่อด้วยนามสกุล HTACCESS ( - ชื่อเต็มของไฟล์ของคุณควรมีลักษณะเช่นนี้ทุกประการ) หลังจากนั้น ให้อัปโหลดไฟล์ที่สร้างขึ้นใหม่ไปยังไดเร็กทอรีรากของเว็บไซต์ของคุณ (ในตำแหน่งเดียวกับที่ไฟล์ปฏิบัติการหลักตั้งอยู่ เป็นต้น ดัชนี.php- และอย่าลืมแทรกบรรทัดด้วยการเข้ารหัสเริ่มต้นที่เราเพิ่งระบุไว้
การเข้ารหัสโดยใช้ชุดอักขระเมตา
เมตาแท็กสามารถส่งข้อมูลเกี่ยวกับเพจไปยังเบราว์เซอร์ในรูปแบบของส่วนหัวพิเศษ ซึ่งหนึ่งในนั้นคือสิ่งที่เราต้องการ - ชุดอักขระ- โดยทั่วไป เมตาแท็กสามารถมีแอตทริบิวต์ที่แตกต่างกันได้มากถึง 4 รายการ:
- เนื้อหา;
- http-equiv;
- ชื่อ;
- โครงการ
อันที่จริง คุณลักษณะทั้งสี่ที่นำเสนอนั้น มีเพียงคุณสมบัติเดียวเท่านั้นที่จำเป็น - เนื้อหาแต่มีข้อยกเว้นอยู่ ตัวอย่างเช่น ในกรณีของเรา เราจะใช้เวอร์ชันที่สั้นลงของรายการ และเราจะตั้งค่าการเข้ารหัสโดยใช้เมตาแท็กดังนี้:
รูปแบบการบันทึกแบบเก่าจมไปสู่การลืมเลือนไปนานแล้ว และไม่มีประโยชน์ที่จะใช้อีกต่อไป:
ดังที่คุณทราบ โดยปกติแล้วเมตาแท็กจะถูกวางไว้ภายในคอนเทนเนอร์ ศีรษะ- ทุกคนคงรู้เรื่องนี้อยู่แล้วโดยไม่มีข้อยกเว้น ดำเนินการนี้ให้เสร็จสิ้นแล้วเราจะไปยังรายการถัดไปในรายการของเรา
การเข้ารหัสไฟล์โดยใช้ฟังก์ชัน PHP ส่วนหัว
วิธีนี้เหมาะสำหรับผู้ที่มีเว็บไซต์ที่ใช้งานโดยใช้ภาษาโปรแกรมที่ได้รับความนิยมมากที่สุดในขณะนี้ โดยเน้นไปที่การสร้างเว็บไซต์เป็นส่วนใหญ่ - PHP (Hyper Text Preprocessor) เพื่อแก้ไขปัญหาที่เกิดขึ้นในบทความนี้เราจะใช้ฟังก์ชัน header() ในตัวที่ยอดเยี่ยมซึ่งออกแบบมาเพื่อส่งส่วนหัวซึ่งคล้ายกับเมตาแท็ก แต่มีความแตกต่างเล็กน้อยที่การกระทำจะดำเนินการจากสคริปต์ PHP และไม่ผ่าน เอาต์พุตโค้ด HTML
ตั้งค่าการเข้ารหัส UTF-8 สำหรับไฟล์โดยใช้ฟังก์ชัน ส่วนหัว()ค่อนข้างง่าย - คุณเพียงแค่ต้องวางโค้ดที่กำหนดไว้ที่จุดเริ่มต้นของหน้า แต่แน่นอนว่าอยู่ในขอบเขต PHP ซึ่งแสดงไว้ดังนี้: здесь у нас PHP-код?>หรืออย่างนั้น -.
Header("ประเภทเนื้อหา: text/html; charset=utf-8");
จุดที่สำคัญที่สุดคือเรามีสิทธิ์ในการส่งส่วนหัวเฉพาะเมื่อไม่มีเอาต์พุตจากสคริปต์มาก่อนเท่านั้น นั่นคือเหตุผลที่เราใส่โค้ดนี้ไว้ที่จุดเริ่มต้นของหน้า คุณต้องทำสิ่งนี้อย่างชาญฉลาดและมีความเข้าใจอย่างดีถึงสิ่งที่เกิดขึ้น เพราะคุณสามารถมั่นใจได้ว่าคุณกำลังแทรกส่วนหัวที่จุดเริ่มต้นของไฟล์ แต่คุณอาจไม่รู้ว่าไฟล์นี้ถูกใช้ในไฟล์อื่นที่มันเข้าไป ถูกดึงโดยใช้ฟังก์ชัน จำเป็นต้องหรือ รวมหลังจากแสดงข้อมูลบางอย่างบนหน้าจอแล้ว ดังนั้นหากคุณไม่เข้าใจสิ่งที่เรากำลังพูดถึงอยู่ในขณะนี้จะเป็นการดีกว่าที่จะดำเนินการขั้นตอนต่อไปและกลับสู่ขั้นตอนนี้หาก 3 ก่อนหน้านี้ไม่ได้ช่วยตั้งค่าการเข้ารหัสที่ถูกต้องของหน้าเว็บไซต์ของคุณ
บันทึกไฟล์ด้วยการเข้ารหัสที่ถูกต้อง
สาเหตุที่พบบ่อยที่สุดประการหนึ่งสำหรับการเกิดรอยแตกร้าวบนเว็บไซต์คือการเข้ารหัสไฟล์ที่ใช้ในการสร้างเอกสารขั้นสุดท้ายไม่ถูกต้อง บ่อยครั้งที่ปัญหานี้เกิดขึ้นในหมู่โปรแกรมเมอร์มือใหม่ที่เพิ่งเริ่มก้าวแรกในการเรียนรู้งานศิลปะ เมื่อเลือกหนึ่งในระบบการดูแลระบบที่ได้รับความนิยมในปัจจุบันเป็นกลไกของไซต์ ปัญหานี้อาจเกิดขึ้นได้น้อยมาก แต่ถ้ามีการใช้งานก็จะเกิดขึ้นในเกือบทุกกรณีที่สาม
ตามที่เราตกลงไว้ก่อนหน้านี้ การเข้ารหัสที่เราใช้กับทั้งหมด แม้แต่ไซต์ภาษารัสเซียที่ซับซ้อนที่สุด ก็คือ UTF-8 ดังนั้น เราจะเข้ารหัสไฟล์ทั้งหมดที่ประกอบเป็นกลไกของไซต์ในรูปแบบเดียวกัน และเพื่อที่จะเปลี่ยนการเข้ารหัสของไฟล์ที่อัปโหลดไปยังเซิร์ฟเวอร์ แน่นอนว่าแผ่นจดบันทึกปกติที่ระบบปฏิบัติการ Windows มอบให้จะไม่เพียงพอ ดังนั้นจึงเป็นการดีกว่าถ้าใช้โปรแกรมบุคคลที่สามที่แจกฟรี - Notepad++ ซึ่งสามารถดาวน์โหลดได้จากเว็บไซต์อย่างเป็นทางการโดยไม่มีปัญหาใด ๆ
เมื่อเสร็จสิ้นกระบวนการติดตั้งแบบง่าย ๆ เรียบร้อยแล้วคุณจะต้องกำหนดให้โปรแกรมนี้เป็นตัวแก้ไขเริ่มต้น ทำการตั้งค่าบางอย่างตามรสนิยมของคุณและเปลี่ยนการเข้ารหัสของไฟล์ที่แสดงไม่ถูกต้องในลักษณะเดียวกับที่แสดงในภาพหน้าจอ เหล่านั้น. คุณต้องเลือก "เข้ารหัสเป็น UTF-8 (ไม่มี BOM)" สัญญาณที่ดีในกรณีนี้ก็คือ ในตอนแรกจะไม่มีการเลือกตัวเลือกใดเลย และคุณจะได้รับแจ้งให้ "แปลงเป็น UTF-8 (ไม่มี BOM)" หากคุณเห็นสิ่งนี้ โปรดแน่ใจว่าเหลือเวลาเพียงไม่กี่วินาทีก่อนที่จะแก้ไขปัญหาการเข้ารหัส
นอกจากนี้ฉันแค่อยากจะบอกว่าคุณต้องเลือกอย่างแน่นอน ไม่มี BOM- มิฉะนั้น หากคุณเพียงเข้ารหัสในรูปแบบ UTF-8 (ด้วย BOM) ไบต์พิเศษจะถูกสร้างขึ้นที่จุดเริ่มต้นของไฟล์ พวกเขาพยายามที่จะไม่ใช้ BOM - Byte Order Mark บนเว็บเมื่อเข้ารหัสในรูปแบบ UTF-8 เพราะ สิ่งนี้นำไปสู่ข้อผิดพลาดโดยรบกวนการตีความ PHP ที่ถูกต้อง
ตอนนี้เมื่อทำตามขั้นตอนที่จำเป็นทั้งหมดเสร็จแล้ว คุณจะเห็นข้อความที่อ่านง่ายบนหน้าเว็บไซต์ของคุณและหายใจสะดวก :)
หนึ่งในปัญหาที่พบบ่อยที่สุดที่มือใหม่ต้องเผชิญ เว็บมาสเตอร์(และไม่ใช่แค่มือใหม่) สิ่งนี้ ปัญหาเกี่ยวกับการเข้ารหัสบนเว็บไซต์- สำหรับฉันมันจะปรากฏขึ้นตลอดเวลาเมื่อสร้างเว็บไซต์ " อับราคาดาบรา“แต่โชคดีที่ฉันรู้ดีว่าจะแก้ไขปัญหานี้อย่างไร ดังนั้นฉันจึงจัดทุกอย่างให้เรียบร้อยภายในไม่กี่วินาที และในบทความนี้ ฉันจะพยายามสอนคุณอย่างรวดเร็วเช่นกัน แก้ไขปัญหาที่เกี่ยวข้องกับการเขียนโค้ดบนเว็บไซต์.
สิ่งแรกที่ควรสังเกตก็คือปัญหาทั้งหมดเกี่ยวกับรูปลักษณ์ของ "abracadabra" นั้นเกี่ยวข้องกับความไม่ตรงกันระหว่างการเข้ารหัสเอกสารและการเข้ารหัสที่เบราว์เซอร์กำหนด สมมติว่ามีเอกสารเข้า วินโดว์-1251แต่ด้วยเหตุผลบางอย่างที่เบราว์เซอร์แสดง UTF-8- และที่มาของความคลาดเคลื่อนดังกล่าวอาจมีสาเหตุดังต่อไปนี้
เหตุผลแรก
เมตาแท็กเขียนไม่ถูกต้อง ประเภทเนื้อหา- โปรดระวัง ควรมีการเข้ารหัสที่ใช้เขียนเอกสารของคุณเสมอ
เหตุผลที่สอง
ดูเหมือนว่าเมตาแท็กจะถูกเขียนตามที่คุณต้องการ และเบราว์เซอร์จะแสดงสิ่งที่คุณต้องการอย่างแน่นอน แต่ด้วยเหตุผลบางประการ ยังคงมีปัญหากับการเข้ารหัส ผู้ร้ายในที่นี้เกือบจะแน่นอนว่าเอกสารนั้นมีการเข้ารหัสที่แตกต่างกัน ถ้าคุณทำงานใน กระดาษจดบันทึก++จากนั้นที่มุมขวาล่างจะมีชื่อการเข้ารหัสของเอกสารปัจจุบัน (เช่น แอนซี่- หากคุณใส่เมตาแท็ก UTF-8และตัวเอกสารเองก็เขียนอยู่ในนั้น แอนซี่จากนั้นทำการแปลงเป็น UTF-8(ผ่านเมนู" การเข้ารหัส"และจุด" แปลงเป็น UTF-8 โดยไม่มี BOM").
เหตุผลที่สาม
เหตุผลที่สี่
และสุดท้ายเหตุผลยอดนิยมประการสุดท้ายก็คือ ปัญหาการเข้ารหัสในฐานข้อมูล- ขั้นแรก ตรวจสอบให้แน่ใจว่าตารางและฟิลด์ทั้งหมดของคุณเขียนด้วยการเข้ารหัสเดียวกัน ซึ่งตรงกับการเข้ารหัสของส่วนที่เหลือของไซต์ หากวิธีนี้ไม่ได้ผล ให้เรียกใช้คำขอต่อไปนี้ทันทีหลังจากเชื่อมต่อสคริปต์:
ตั้งชื่อ "utf8"
แทนที่จะเป็น " utf8" อาจมีการเข้ารหัสที่แตกต่างกัน หลังจากนั้น ข้อมูลทั้งหมดจากฐานข้อมูลควรออกมาในรูปแบบการเข้ารหัสที่ถูกต้อง
ในบทความนี้ ฉันหวังว่าฉันจะได้อธิบายอย่างน้อย 90% ของปัญหาเกี่ยวข้องกับการปรากฏตัวของ "พูดพล่อยๆ" บนไซต์- ตอนนี้คุณต้องจัดการกับปัญหายอดนิยมและเรียบง่ายเช่นการเข้ารหัสที่ไม่ถูกต้องในเวลาอันรวดเร็ว
15.03.2016
ยัง
สวัสดีทุกคน!
มาเรียนรู้พื้นฐานของ HTML กันต่อ ในบทเรียนนี้เราจะดู วิธีระบุการเข้ารหัส HTMLสำหรับไซต์ (หน้าเว็บ)
บทเรียนนี้มีความสำคัญมากเนื่องจากการไม่ทราบวิธีระบุการเข้ารหัสสำหรับหน้าเว็บอาจส่งผลให้หน้าเว็บของคุณไม่สามารถอ่านได้ คุณถามว่า:“ เป็นไปได้อย่างไรที่พวกเขาทำไม่ได้”
ฉันจะแสดงให้คุณเห็นว่าบล็อกของฉันมีการเข้ารหัสที่ไม่ถูกต้องอย่างไร:
ดังนั้น, การเข้ารหัส HTML– เป็นตารางการติดต่อระหว่างรหัสและสัญลักษณ์ตัวอักษร นั่นคือคอมพิวเตอร์เข้ารหัสของเราจะเปลี่ยนรหัสให้เป็นตัวอักษรที่ชัดเจนและอ่านง่าย
หากต้องการบอกเบราว์เซอร์ว่าอักขระในหน้าเว็บเข้ารหัสอะไร คุณต้องเขียนระหว่างแท็ก
นี่คือเมตาแท็ก:
โปรดทราบว่ารหัสมีคำว่า "ชื่อการเข้ารหัส" ที่นี่คุณจะต้องระบุการเข้ารหัส HTML
โดยปกติจะเป็น utf-8 หรือ windows-1251
การเข้ารหัสสำหรับutf-8:
การเข้ารหัสสำหรับ วินโดว์-1251:
หากคุณลืมบอกเบราว์เซอร์ว่าไซต์หรือหน้าเว็บมีการเข้ารหัสอะไรบ้าง เบราว์เซอร์จะพยายามระบุการเข้ารหัสโดยอัตโนมัติ แต่ก็อาจไม่สำเร็จอย่างถูกต้องเสมอไป ในที่สุดผลลัพธ์ก็จะเหมือนกับสิ่งที่ฉันแสดงไว้ในภาพด้านบน
เรามาฝึกกันต่อ
วิธีสร้างเอกสาร HTML ด้วย
การเข้ารหัส utf-8
“โปรแกรมทั้งหมด” => “อุปกรณ์เสริม” => “แผ่นจดบันทึก” :
นี่คือเมตาแท็ก:
คลิกในสมุดบันทึก “ไฟล์” => “บันทึกเป็น...”:
โดยที่รายการ "การเข้ารหัส:" ถูกระบุเป็น "UTF-8"
คลิก "บันทึก":
ขยายภาพ?
วิธีสร้างเอกสาร HTML ด้วยการเข้ารหัส windows-1251
เปิดสมุดบันทึกมาตรฐาน “โปรแกรมทั้งหมด” => “อุปกรณ์เสริม” => “แผ่นจดบันทึก”
.
จากนั้น วางโค้ด HTML มาตรฐานลงใน Notepad:
ตอนนี้เราระบุว่าการเข้ารหัสใดที่หน้าเว็บจะถูกบันทึกไว้ เมื่อต้องการทำเช่นนี้ ให้วางระหว่างแท็ก
นี่คือเมตาแท็ก:
นี่คือสิ่งที่ควรมีลักษณะเช่นนี้ (บรรทัดที่ 4):
คลิกในสมุดบันทึก “ไฟล์” => “บันทึกเป็น...”:
ในกรณีที่มีรายการ "ชื่อไฟล์" ให้เขียนชื่อของหน้าเว็บเป็นภาษาละตินและมีนามสกุลเป็น ".html" ฉันคิดว่าคุณจำสิ่งนี้ได้จากบทเรียนแรกของคุณ
เมื่อระบุรายการ "การเข้ารหัส:" ให้ระบุ "ANSI"
คลิก "บันทึก":
แค่นั้นแหละ!
เว็บมาสเตอร์ส่วนใหญ่เลือกการเข้ารหัส UTF-8 ฉันจะไม่บอกเหตุผลแก่คุณเพราะฉันเกรงว่าจะทำให้คุณได้รับข้อมูลที่ไม่จำเป็นในขั้นความรู้ HTML มากเกินไป
ตัวอย่างเช่น ในแผ่นจดบันทึก ให้ตั้งโค้ด:
และระบุ “ANSI” เมื่อบันทึก:
เนื่องจากไม่ถูกต้อง ผลลัพธ์จะเป็นดังนี้:
บันทึกหน้าเว็บของคุณอย่างถูกต้องเพื่อหลีกเลี่ยงผลลัพธ์เช่นนี้
โพสต์ก่อนหน้า
รายการถัดไป