3
« เมื่อ: 16/07/07, 00:20:39 »
เพิ่งดาวน์โหลดไปใช้งาน เจอปัญหานี้เหมือนกัน
ปัญหาเกิดจากการใช้ charset เป็น utf-8 ทำให้มีการจัดเก็บตัวอักษรเพิ่มขึ้น วิธีการแก้ปัญหาสามารถแก้ได้หลายจุด หรืออาจจะต้องแก้พร้อมๆกัน
1. ในส่วนของ database mysql ถ้าหากเป็น utf8_bin อาจจะต้องไปแก้ใน table "smf_messages" จาก TINYTEXT เป็น MEDIUMTEXT
ข้อนี้เท่ากับเป็นการขยายขนาดฟิลด์ แต่ถ้าแก้แค่นี้ก็ยังคงเหมือนเดิม นอกจากจะเปลี่ยนสคริปตามที่คุณ terdsak บอก
2. การแก้ไขในส่วนของคำสั่ง
เปิดไฟล์ /Sources/Post.php แล้วหาบรรทัดคำสั่ง
// Make sure the subject isn't too long - taking into account special characters.
if ($func['strlen']($form_subject) > 100)
$form_subject = $func['substr']($form_subject, 0, 100);
// At this point, we want to make sure the subject isn't too long.
if ($func['strlen']($_POST['subject']) > 100)
$_POST['subject'] = addslashes($func['substr'](stripslashes($_POST['subject']), 0, 100));
// Maximum number of characters.
if ($func['strlen']($_POST['subject']) > 100)
$_POST['subject'] = addslashes($func['substr'](stripslashes($_POST['subject']), 0, 100));
ทั้งหมด 3 จุด แล้วเปลี่ยนตัวเลขจาก 100 ให้เพิ่มขึ้นเป็นซัก 300 - 500 แทน
ตรงนี้ทำให้มีการตัดคำให้ยาวขึ้น ซึ่งจะแก้ปัญหาได้ระดับหนึ่ง แต่จะยังมีปัญหาว่าถ้าเกิดมีการตั้งหัวข้อที่ยาวมากๆๆก็จะเจอปัญหาการตัดคำไม่ลงตัว กลายเป็นมีตัวประหลาดเหมือนเดิม
ั3. เปิดไฟล์ /Themes/default/Post.template.php
ประมาณบรรทัดที่ 426
// Now show the subject box for this post.
echo '
<tr>
<td align="right" style="font-weight: bold;', isset($context['post_error']['no_subject']) ? 'color: red;' : '', '" id="caption_subject">
', $txt[70], ':
</td>
<td>
<input type="text" name="subject"', $context['subject'] == '' ? '' : ' value="' . $context['subject'] . '"', ' tabindex="', $context['tabindex']++, '" size="80" maxlength="80" />
ให้เปลี่ยนค่า maxlength ให้ลดลงเหลือซัก 50
สรุปแล้วเรื่องนี้เป็นปัญหาที่เกิดกับซอฟแวร์เกือบทุกตัวที่ใช้ utf-8 ครับ
ใครมีวิธีอื่นที่ง่ายๆ ช่วยมาโพสต์แลกเปลี่ยนกันด้วยคับ