พอดีคนรู้จักเขาย้ายมาอยู่ host ผมหนะครับ
หน้าเว็บเขาใช้ Dreamweaver เขียนเอา แล้ว PHP+MySQL ดึงข้อมูลจาก phpBB มาแสดง
ปัญหาเชิญตามเข้าไปดูในเว็บครับ ตอนแรกที่ย้ายมาพวกข้อมูล forum มันไม่แสดงเป็นภาษาไทยด้วยซ้ำ
http://www.fpsthailand.com/
ผมก็เลยใส่ mysql_query(“SET NAMES ‘utf8’”); เข้าไป
ปัญหาใหม่ก็ตามมา คงจะเห็นกันนะครับ เจ้าตัวข้าวหลามตัดแล้วมีอะไรเอ่ยอยู่ตรงกลางหนะครับ นี่ไม่ใช่ครั้งแรกที่ผมเจอ แต่ผมรับปากเขาไว้แล้วว่าจะแก้ให้ แต่ยังไม่รู้เลยว่าทำอย่างไรดีถึงจะออกมาแล้วไม่มีปัญหาแบบนี้
ฐานข้อมูลเก็บเป็น utf-8 ครับ การดึงข้อมูลก็อย่างที่เห็นแหละครับ SET NAMES utf8 และ page encoding ก็ utf-8 ครับ
รบกวนด้วยครับ ขอบคุณครับ
เหมือนจะได้แล้วใช่ไหม เข้าไปแล้วเห็นแว๊บๆ เข้าอีกที หายแล้ว
jirawat
3
หมายถึง frame นี้หรือเปล่าครับ http://www.fpsthailand.com/clip.php
ดูโค้ดแล้วยังไม่ได้กำหนด encoding นะครับ
ขอบคุณครับ ลืมแก้ encoding ของไฟล์เป็น utf-8 ครับ -.- ที่ไม่กำหนด encoding เป็นไฟล์ๆไปเพราะไม่อยากใส่ metatag เยอะนะครับ ตอนนี้แก้แล้วครับ
แต่ปัญหาจริงๆที่บอกในกระทู้ผมหมายถึงแบบนี้ครับ
http://uppic.ziphai.com/images/662009_09_23_15_44_34.png
ตรงกรอบดำหนะครับ
ปล. ตอนที่แก้ก็ลองเขียนแบบ full พร้อม metatag กำหนด encoding อะไรตามระเบียบหมดแล้วนะครับ ก็ไม่มีท่าทีว่าจะหาย ไม่รู้ว่าเป็นปัญหาที่ตัว MySQL ของผมด้วยหรือเปล่าครับ? แต่ถ้าใช่ ทำไม forum มันปกติหว่า T.T ใช้ CentOS i386 + DA ครับ
oatcpe
5
ตรงกรอบดำๆ เป็นปกติครับ
มันเป็นเพราะฟิลเก็บข้อมูลมันไม่พอดีกับตัวอักษรน่ะครับ มันเลยมีการตัดข้อมูลทิ้ง ทีนี้เวลามันตัดทิ้งบางตัวมันตัดไปแค่ 1 ไบต์ครับ (ปกติ utf-8 1ตัวมันใช้ 2byte) ดังนั้นเมื่อมีข้อมูลแค่ byte เดียวมันเลยหาตัวอักษรไทยมา map ให้ตรงไม่ได้ มันเลยขึ้นเป็นตัวแปลกๆอย่างนั้น
วิธีแก้คือต้องตัดคำให้พอดีกับพื้นที่เก็บข้อมูลในฟิลของ mysql ครับ (ใช้ script ตัดคำก่อนเอาข้อมูลไปเ็ก็บ)
jirawat
6
ตามนี้ครับ ไม่แน่ใจว่า script นั้นใช้ฟังก์ชั่นไหนในหารตัดคำ ถ้าใช้ substr ลองเปลี่ยนไปใช้ iconv_substr ดูครับ
แก้ไขเพิ่มเติมครับ: ผมเข้าใจว่า ถ้าทำหน้าเว็บเป็น iframe ไฟล์ที่เอาไปใส่ใน iframe ต้องใส่ tag meta ต่างๆให้ครบนะครับ เพราะ browser จะเห็นเป็นหน้าเว็บหน้าหนึ่งเลย โดยที่ไม่เกี่ยวกับหน้าที่ main frame ซึ่งจะไม่เหมือน include ใน php (ถ้าเข้าใจผิดต้องขออภัยด้วยนะครับ)
Script ที่ใช้เป็น phpbb ครับ forum สำเร็จรูป และข้อมูลจริงไม่ได้ถูกตัดแต่อย่างใด สามารถกดไล่ดูใน forum ได้ครับ ดึงมาจากในส่วนนั้นล้วนๆ แต่มันเพี้ยนตอนเอาออกมาแสดงผลนี่หละครับ
เช่น
http://www.fpsthailand.com/clip.php
เอามาจาก
http://www.fpsthailand.com/forum/viewforum.php?f=40
SK vs. Fnatic เจอกันนอกเกมส์…จะเป็นยังไงต้องติดตามชม !!
ปกติถ้าเป็น UTF-8 ผมจะใช้ Multibyte String Functions ครับ จาก substr เฉยๆ ก็จะเป็น mb_substr แทน
เข้าใจว่าคร่าวๆ ว่า UTF-8 ภาษาอังกฤษ 1 ตัว = 1 byte แต่ภาษาไทย 1 ตัว ≈2-3 bytes เวลาตัดคำมันเลยไม่เท่ากัน
$myString = “กขคง”;
$myChar
มีปัญหาตรงคำสั่ง
substr($rowb[1], 0, 100)
เนื่องจากเป็น utf-8 จะตัดด้วย substr ไม่ได้ (หากเป็น tis-620 จะตัดได้)
ทางแก้มี 2 ทาง คือ
-
ไม่ต้องตัด substr แสดง $rowb[1] ไปเลย (ซึ่งอาจจะมีบางหัวข้อยาวไปหน่อย แต่ไม่เพี้ยน)
-
ตัดคำด้วยวิธี utf-8 ผมไม่แน่ใจว่าใช้คำสั่งมาตรฐานอะไร แต่มี function ที่เขียนเองคือ
[tt]
function utf8_substr($str,$start) {
จบ… ง่ายๆครับ เพิ่ม mb_ เข้าไป (แต่โฮสต้องลง --enable-mbstring ไว้ ซึ่งโดยปกติลงไว้อยู่แล้ว)
ขอบคุณทุกคนมากครับ ตอนนี้ผมเพิ่มการตัดคำเป็น 200 แล้วใช้ Multibyte ตามที่คุณ I’mStyLE!* (TFB) ว่า
ผลออกมาคือการตัดคำได้ผลดั่งใจแล้วครับ ตอนแรกผมไม่ทราบด้วยซ้ำว่ามันคือการตัดคำตามปกติ เลยคิดไปว่ามันเป็นปัญหา ต้องขออภัยที่ปล่อยไก่ออกมาตัวใหญ่ครับ

oatcpe
13
ถูกต้องครับ iframe มันนับเป็นอีก 1 หน้าเว็บต่างหากเลยครับ ดังนั้นต้องตั้ง header ให้ครบด้วยครับ เพราะมันจะไม่ดึงของหน้าหลักมาใช้
ครับ ได้ขอเตือนใจใหม่ว่า iframe แค่ดึงมาแสดงผลต้องใส่ให้ครบ O_O
แต่อันนี้ที่ผมไม่ใส่เพราะปกติถ้าเราตั้ง file encoding เป็น utf-8 มันก็จะแสดงเป็น utf-8 อยู่แล้วหนะครับ เลยลักไก่ไป แหะๆ
ขอบคุณเพื่อนๆทุกๆคนเลยครับ