ปัญหา ของ SMF UTF-8 ที่เป็นภาษาต่างดาวหรือโพสต์หัวข้อยาวๆ แล้วโดนตัดสั้น
ล้วนเป็นปัญหามาจากการ Encoding ทั้งสิ้น สาเหตุก็เกิดมาจาก
- การกำหนดตัวแปรการใช้งานชุดตัวอักษรในไฟล์ Settings.php
- การแปลงชุดอักขระในฐานข้อมูล (Database Encoding)
- การแปลงหน่วย HTML ไปเป็นชุดอักขระ UTF-8 (Convert HTML-entities to UTF-8 characters)
- การแปลงชุดอักขระในไฟล์ภาษา (File Encoding)
วิธีแก้
ขั้นตอนที่ 1ตรวจสอบไฟล์ Settings.php
ตัวแปร $language
ตัวแปร $db_character_set
นี่คือส่วนที่กำหนดใช้งานชุดภาษา หากตอนติดตั้งคุณได้ CHMOD = 777 มันก็จะเขียนลงไปโดยอัตโนมัติ แต่หากไม่ได้ CHMOD ก็จะไม่มีการเขียนคุณจะต้องจัดการตัวเอง
เมื่อได้กำหนดเช่นนี้แล้วคราวนี้ก็มา View Code ดูกัน ใน meta Tag คุณจะเห็นแบบนี้
นั่นหมายถึงบอร์ดของคุณได้ใช้ชุดตัวอักษรชนิด UTF-8 อันเป็นผลมาจากการกำหนดตัวแปรในไฟล์ Settings.php
ขั้นตอนที่ 2 Encoding Database ใน phpMyAdmin
แน่นอนครับขั้นตอนนี้คุณต้องเข้าไปใน phpMyAdmin เพื่อจัดการขั้นตอนดังกล่าว หากEncoding Database เป็น UTF-8 ไม่สามารถทำย้อนคืนเป็นอย่างอื่นได้ เพราะชุดอักขระ UTF-8 เป็นชุดอักขระที่สมบูรณ์แบบกว่าชุดอักขระอื่นๆ
ขั้นตอนที่ 3 แปลงหน่วย HTML ไปเป็นชุดอักขระ UTF-8 (Convert HTML-entities to UTF-8 characters)
คราวนี้มาถึงการ Convert HTML-entities to UTF-8 characters ซึ่งอยู่ในส่วน ผู้ดูแล --> บำรุงรักษา ขั้นตอนนี้ไม่มีความจำเป็นต้องทำหากตอนติดตั้งคุณได้กำหนดค่าเริ่มต้นของ ภาษาเป็น Thai-utf8 และเลือก Use UTF-8 as default charecter set
หาก คุณละเลยไม่ได้กำหนดค่าทั้ง 2 นั้นคุณจำเป็นจะต้องทำ Convert HTML-entities to UTF-8 characters หากต้องการใช้ชุดตัวอักษร UTF-8
กรณี ที่ไม่ได้กำหนดค่าทั้ง 2 ตอนติดตั้งนั้น แล้วมาทำ Convert HTML-entities to UTF-8 characters ขั้นตอนนี้คุณจำเป็น Encoding Database ใน phpMyAdmin เสียก่อนนะครับ ห้ามลัดขั้นตอนอย่างเด็ดขาด
หาก คุณทำตามขั้นตอนทั้งหมดนี้ปัญหาที่คุณเป็นอยู่ตอนนี้ หรือตั้งหัวข้อยาวๆ แล้วเป็นภาษาต่างดาว, ตั้งหัวข้อยาวๆ แล้วตัดสั้นเหลือ xx ตัวอักษร จะหมดไปทันที สรุปก็คือเรื่องปัญหาของภาษาใน SMF มีวิธีจัดการไม่มากไปกว่านี้
เว้น ไว้แต่ว่าในกรณีที่ต้องการให้หัวข้อมีมากกว่า 80 ตัวอักษรถึงจำเป็นต้องไปแก้ไขโค้ดในไฟล์ Post.template.php ซึ่งเป็นวิธีที่ไม่แนะนำ เพราะจำนวน 80 ตัวอักษรเป็นขนาดที่เหมาะสมในการจัดการของฐานข้อมูล และหัวข้อก็ไม่มีความจำเป็นจะต้องมีจำนวนตัวอักษรมากไปกว่านี้ เพราะในเนื้อหาของกระทู้เราสามารถอธิบายเนื้อความกี่ตัวอักษรก็ได้ ไม่ได้คิดที่จะสื่อสารกันให้เข้าใจถึงรายละเอียดกันแค่เพียงหัวข้อ
หาก จัดการตามขั้นตอนดังกล่าวแล้วยังแก้ปัญหาไม่ได้ คราวนี้ก็เป็นปัญหาของ Hosting แล้วครับว่ารองรับ UTF-8 หรือเปล่า หากไม่รองรับก็มีคำแนะนำว่าเลิกใช้เหอะ!
ขั้นตอนที่ 4 แปลงชุดอักขระในไฟล์ภาษา (File Encoding)
คราว นี้มาถึงกรณีการเปลี่ยนชุดภาษาจาก *.thai.php -->> *.thai-utf8.php จุดสังเกตุง่ายๆ ในส่วนนี้ถึงเรื่องของการแสดงภาษาผิดพลาดก็คือ หากไฟล์ภาษามีปัญหาก็จะแสดงผลผิดเพี้ยนเฉพาะส่วนของเมนู หรือคำสั่งการใช้งานต่างๆ จะมีภาษาผิดเพี้ยน ซึ่งไม่มีผลกระทบถึงส่วนของเนื้อหา
คุณไม่จำเป็นต้องไปโหลดมาใหม่เลยครับ เอาไฟล์เติมนั้นแหละเปลี่ยนชื่อเอา เช่น
Admin.thai.php ก็เปลียนเป็น Admin.thai-utf8.php แล้วก็ Encoding เป็น UTF-8 ตัวอย่างการ Encoding อ้างอิงจากโปรแกรม EditPlus
แต่ หากไฟล์ภาษาไม่มีการเพิ่ม $txt ใดๆ เข้ามาเป็นไฟล์เดิมๆ ไปโหลดมาเปลี่ยนใหม่จะง่าย และเร็วกว่านะครับ กรณีนี้เหมาะสำหรับได้ลง mod และเพิ่ม $txt ไปมากแล้วก็ไม่ต้องมาไล่เพิ่มใหม่ทำแบบนี้จะเร็วกว่า ง่ายกว่าการมานั่งไล่เพิ่ม $txt
เครดิต:คุณUnclEo