ผู้เขียน หัวข้อ: ปัญหา SMFเป็นภาษาต่างดาว  (อ่าน 1131 ครั้ง)

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

ออฟไลน์ smf

  • [color=green][i]"ถ้าคุณไม่สามารถอธิบายอย่างง่ายๆ ให้คนอื่นเข้าใจได้แล้วล่ะก็ แสดงว่าคุณยังเข้าใจมันไม่ดีพอ"[/i][/color]
  • Administrator
  • Hero Member
  • *****
  • กระทู้: 1,368
  • พอยท์: 5
    • ดูรายละเอียด
    • pordoo.com
    • อีเมล์
ปัญหา SMFเป็นภาษาต่างดาว
« เมื่อ: 19 กรกฎาคม 2015, 23:12:14 »
ปัญหา ของ 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