หัวข้อ: การนับจำนวนตัวอักษรภาษาไทย โดย ไม่นับ สระ และ สัญลักษณ์ ต่างๆ ทำยังไงคะ เริ่มหัวข้อโดย: puiiz_zz ที่ 05 กุมภาพันธ์ 2012, 15:13:41 ลองหาโค้ด ใน google มาทดสอบหมดแล้ว
แต่มันนับ ไม่ตรง อะคะ เช่น พิมพ์ " ส " มันนับได้ 3 character ลองใช้โค้ด ตามเว็บแล้ว มัน ก็ไม่ได้ ช่วยทีนะคะ ใช้โค้ดนี้ไปคะ http://www.it4x.com/forum/index.php/topic,8328.0.html http://www.thaicreate.com/php/forum/036413.html http://moshikub.com/strlen-php-%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%99%E0%B8%B1%E0%B8%9A%E0%B8%95%E0%B8%B1%E0%B8%A7%E0%B8%AD%E0%B8%B1%E0%B8%81%E0%B8%A9%E0%B8%A3-%E0%B9%83%E0%B8%99%E0%B8%82%E0%B9%89%E0%B8%AD%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1-string/ http://necz.net/2011/09/20/php-%E0%B8%95%E0%B8%B1%E0%B8%94%E0%B8%AD%E0%B8%B1%E0%B8%81%E0%B8%82%E0%B8%A3%E0%B8%B0%E0%B8%9E%E0%B8%B4%E0%B9%80%E0%B8%A8%E0%B8%A9/ จุดประสงค์คือต้องการจัด นับตัวอักษรทั้งหมดในข้อความ รวมทั้ง ตัวอักษรภาษาไทยด้วย โดยจะไม่นับ สระ อะ อา อิ อี และ วรรณยุกต์ เอกโท ตรี จัตวา และ ไม่นับ อักษรพิเศษ symbol แต่ พอลอง ใช้โค้ดที่ได้มาในเวบแล้ว มันนับตัวอักษรภาษาไทยผิดอะคะ แต่นับตัวอักษรอังกฤษได้ถูกต้อง แล้วแต่ละ โค้ด การ encode ต่างกันอีก -*- ข้อมูลที่เรียกมานับ คือข้อมูลใน ฐานข้อมูล ซึ่งในฐานข้อมูลใช้ tis-20 แต่ในหน้า page ใช้ window874 ใครพอมีโค้ด หรือแนะนำได้บ้างคะ ต้องใช้งานด่วนเลยช่วยที หัวข้อ: Re: การนับจำนวนตัวอักษรภาษาไทย โดย ไม่นับ สระ และ สัญลักษณ์ ต่างๆ ทำยังไงคะ เริ่มหัวข้อโดย: thai2ads ที่ 05 กุมภาพันธ์ 2012, 17:10:43 mb_strlen();
ตัวอย่าง $text="ทดสอบ"; echo mb_strlen($text); หัวข้อ: Re: การนับจำนวนตัวอักษรภาษาไทย โดย ไม่นับ สระ และ สัญลักษณ์ ต่างๆ ทำยังไงคะ เริ่มหัวข้อโดย: MeenyFancy ที่ 05 กุมภาพันธ์ 2012, 22:03:57 เอาแบบบื้อๆ เลยนะ str_replace ก่อนครับ
โค๊ด: <?php result โค๊ด: 2 หัวข้อ: Re: การนับจำนวนตัวอักษรภาษาไทย โดย ไม่นับ สระ และ สัญลักษณ์ ต่างๆ ทำยังไงคะ เริ่มหัวข้อโดย: Splendith ที่ 05 กุมภาพันธ์ 2012, 23:44:20 ไม่รู้ว่าผมเข้าใจถูกหรือเปล่านะครับ
อันนี้ผมเขียนโค้ดขึ้นมาแล้วทดสอบโดยฐานข้อมูลใช้ tis-620 / หน้า page ใช้ windows-874 ลองใช้แล้วไม่มีปัญหา ผมทำแบบตัดสระและวรรณยุกต์ออกทั้งหมดนะครับ (ไม่ชัวร์ว่าที่คุณพูดว่าสระ อะ อา อิ อี นั้นตัดแค่ 4 สระหรือตัดทุกสระ เพราะเห็นหัวข้อกระทู้บอกให้ไม่นับสระ *0*) โค๊ด: function th_strlen($str) ถ้ามีปัญหาใดๆ บอกนะครับผม :wanwan019: หัวข้อ: Re: การนับจำนวนตัวอักษรภาษาไทย โดย ไม่นับ สระ และ สัญลักษณ์ ต่างๆ ทำยังไงคะ เริ่มหัวข้อโดย: puiiz_zz ที่ 06 กุมภาพันธ์ 2012, 00:37:18 ไม่รู้ว่าผมเข้าใจถูกหรือเปล่านะครับ อันนี้ผมเขียนโค้ดขึ้นมาแล้วทดสอบโดยฐานข้อมูลใช้ tis-620 / หน้า page ใช้ windows-874 ลองใช้แล้วไม่มีปัญหา ผมทำแบบตัดสระและวรรณยุกต์ออกทั้งหมดนะครับ (ไม่ชัวร์ว่าที่คุณพูดว่าสระ อะ อา อิ อี นั้นตัดแค่ 4 สระหรือตัดทุกสระ เพราะเห็นหัวข้อกระทู้บอกให้ไม่นับสระ *0*) โค๊ด: function th_strlen($str) ถ้ามีปัญหาใดๆ บอกนะครับผม :wanwan019: สงสัยจะมีปัญหา กับการ Encode แน่เลยคะ ลองโค้ดที่ให้มาใช้ได้ปกติเลย นับได้ปกติ แต่ปัญหาที่เจอคือ พอเอาไปใช้งานจริง ในหน้า ที่ใส่ฟังชั่น ทำการ ใส่ไว้แบบนี้ print '<meta http-equiv="Content-Type" content="text/html; charset=windows-874" />'; จากนั้น ก็ทำการ include('../config.php'); include('../account/account.php'); mysql_query(" SET NAMES UTF8"); แล้ว พอมันไปใช้งานฟังชั่น ก็จะให้ทำการดึงข้อมูลที่จะ นับจำนวนคำมาจากฐานข้อมูล ซึ่ง ได้มีการตั้งใส่ส่วนนี้ไว้เป็น tis-620 พอฟังชั่น นับจำนวนคำทำงาน ลองพิมพ์แค่ตัวอักษร "ด" = แต่มัน นับ ได้ 3 character ใครก็ได้ช่วยที แก้ยังไงได้บ้างคะ ลองแก้ ตรง mysql_query(" SET NAMES UTF8"); เป็น tis620 และ windows-874 แล้ว ก็ยังนับไม่ถูกต้อง หัวข้อ: Re: การนับจำนวนตัวอักษรภาษาไทย โดย ไม่นับ สระ และ สัญลักษณ์ ต่างๆ ทำยังไงคะ เริ่มหัวข้อโดย: talon ที่ 06 กุมภาพันธ์ 2012, 01:26:29 เดา ๆ เอานะครับว่าเป็นเพราะใน DB เป็น UTF-8 ครับ
strlen simply counts the number of bytes in a string, not the number of characters. This means for UTF-8 the integer it returns is actually longer than the number of characters in the string. strlen จะนับจำนวนไบท์ ไม่ได้นับจำนวนตัวอักษร นั่นหมายความว่า สำหรับ UTF-8 ค่าตัวเลขที่ได้รับจาก strlen จะยาวกว่า จำนวนตัวอักษร ลองใช้ function เปลี่ยนจาก utf-8 เป็น tis-620 ก่อนครับแล้วค่อยใช้ ฟังก์ช้นของคุณ Splendith นับค่าเอาครับ โค๊ด: $str = th_strlen(utf8_to_tis620($str)); หัวข้อ: Re: การนับจำนวนตัวอักษรภาษาไทย โดย ไม่นับ สระ และ สัญลักษณ์ ต่างๆ ทำยังไงคะ เริ่มหัวข้อโดย: puiiz_zz ที่ 06 กุมภาพันธ์ 2012, 02:25:50 เดา ๆ เอานะครับว่าเป็นเพราะใน DB เป็น UTF-8 ครับ strlen simply counts the number of bytes in a string, not the number of characters. This means for UTF-8 the integer it returns is actually longer than the number of characters in the string. strlen จะนับจำนวนไบท์ ไม่ได้นับจำนวนตัวอักษร นั่นหมายความว่า สำหรับ UTF-8 ค่าตัวเลขที่ได้รับจาก strlen จะยาวกว่า จำนวนตัวอักษร ลองใช้ function เปลี่ยนจาก utf-8 เป็น tis-620 ก่อนครับแล้วค่อยใช้ ฟังก์ช้นของคุณ Splendith นับค่าเอาครับ โค๊ด: $str = th_strlen(utf8_to_tis620($str)); ข้อมูลใน DB มันเป็น Tis-620 อยู่แล้วนะคะ แต่ หน้าที่ ใช้งานฟังชั่น include('../config.php'); include('../account/account.php'); mysql_query(" SET NAMES UTF8"); ถ้าลองเปลี่ยนจาก SET NAMES TIS620 ค่าที่ได้มันเปลี่ยนไป คะ มันเพิ่มขึ้นเป็น 8 9 char บางที อ่านไม่ออกเลย หัวข้อ: Re: การนับจำนวนตัวอักษรภาษาไทย โดย ไม่นับ สระ และ สัญลักษณ์ ต่างๆ ทำยังไงคะ เริ่มหัวข้อโดย: WPDSign ที่ 06 กุมภาพันธ์ 2012, 02:45:47 ขอเก็บความรู้ครับ เดี่ยวว่างๆมาอ่าน อ่านได้นิดเริ่มลึก
หัวข้อ: Re: การนับจำนวนตัวอักษรภาษาไทย โดย ไม่นับ สระ และ สัญลักษณ์ ต่างๆ ทำยังไงคะ เริ่มหัวข้อโดย: talon ที่ 06 กุมภาพันธ์ 2012, 03:00:23 ไฟล์ php ของคุณ save ด้วย utf8 format ครับ
ถ้าเปลี่ยน save เป็น ANSI จะใช้ function strlen ได้ตามปกติ หรือถ้าอยากใช้ utf8 เหมือนเดิม ก็เอาฟังก์ช้นใน rep ที่แล้วของผมมาใช้ครับ ตะกี๊ทดสอบแล้ว ใช้ได้แน่นอน หัวข้อ: Re: การนับจำนวนตัวอักษรภาษาไทย โดย ไม่นับ สระ และ สัญลักษณ์ ต่างๆ ทำยังไงคะ เริ่มหัวข้อโดย: puiiz_zz ที่ 06 กุมภาพันธ์ 2012, 04:13:57 ไฟล์ php ของคุณ save ด้วย utf8 format ครับ ถ้าเปลี่ยน save เป็น ANSI จะใช้ function strlen ได้ตามปกติ หรือถ้าอยากใช้ utf8 เหมือนเดิม ก็เอาฟังก์ช้นใน rep ที่แล้วของผมมาใช้ครับ ตะกี๊ทดสอบแล้ว ใช้ได้แน่นอน โค๊ด:
ช่วยดูให้ทีคะ โค้ดเป็นแบบนี้ ตอนนี้มันก็ยังไม่ได้ หัวข้อ: Re: การนับจำนวนตัวอักษรภาษาไทย โดย ไม่นับ สระ และ สัญลักษณ์ ต่างๆ ทำยังไงคะ เริ่มหัวข้อโดย: aek26 ที่ 06 กุมภาพันธ์ 2012, 08:19:15 เยี่ยมครับ ขอมาร์ไว้หน่อยครับ
หัวข้อ: Re: การนับจำนวนตัวอักษรภาษาไทย โดย ไม่นับ สระ และ สัญลักษณ์ ต่างๆ ทำยังไงคะ เริ่มหัวข้อโดย: Splendith ที่ 06 กุมภาพันธ์ 2012, 12:46:49 ขอโค้ดตอนคุณเรียกข้อมูลจากฐานข้อมูลทีครับ แล้วเวลา echo ข้อมูลออกมาเป็นภาษาต่างดาวหรือปกติครับ
ดูโค้ดที่ให้มาแล้วงงๆ ไม่รู้ว่าอยู่ส่วนไหนของโปรแกรม :P คำสั่ง mysql_query("SET NAMES UTF8"); ต้องใช้หลังคำสั่ง mysql_connect นะครับ ถ้าใช้ UTF8 โค้ดฟังชั่นก็จะประมาณนี้ โค๊ด: function th_strlen($str) อันนี้คือตัวอย่างไฟล์เต็มๆ ที่ผมลองแล้วปกติครับ โค๊ด: <? หัวข้อ: Re: การนับจำนวนตัวอักษรภาษาไทย โดย ไม่นับ เริ่มหัวข้อโดย: talon ที่ 06 กุมภาพันธ์ 2012, 13:03:11 ไม่เกี่ยวกับข้อมูลใน DB ครับ
แต่เป็นการ save file script ของคุณ ซึ่งตอนที่คุณแก้ไขไฟล์ php script นั้น คุณ save เป็น utf-8 format ซึ่งมีผลทำให้ function strlen เพี้ยน วิธีแก้ก็เพิ่ม function ตามโค้ดข้างล่างนี่ครับ โค๊ด: <?php หัวข้อ: Re: การนับจำนวนตัวอักษรภาษาไทย โดย ไม่นับ สระ และ สัญลักษณ์ ต่างๆ ทำยังไงคะ เริ่มหัวข้อโดย: talon ที่ 06 กุมภาพันธ์ 2012, 13:08:39 ออกตัวก่อนนะครับ ว่าไม่ได้เก่ง coding แค่พอรู้งู ๆ ปลา ๆ
เผอิญเคยอ่านเจอว่า การ save file เป็น utf8 จะำทำให้ขนาดไฟล์ใหญ่ขึ้น เพราะ file utf8 ใช้จำนวนไบท์ในการเก็บมากกว่า file แบบ ANSI มันก็เลยเอะใจน่ะครับ ส่วน coding ที่เห็น ผมก็ถามอากู๋เอาทั้งนั้นแหละครับ แหะ ๆ ๆ หัวข้อ: Re: การนับจำนวนตัวอักษรภาษาไทย โดย ไม่นับ สระ และ สัญลักษณ์ ต่างๆ ทำยังไงคะ เริ่มหัวข้อโดย: puiiz_zz ที่ 06 กุมภาพันธ์ 2012, 18:19:15 ออกตัวก่อนนะครับ ว่าไม่ได้เก่ง coding แค่พอรู้งู ๆ ปลา ๆ เผอิญเคยอ่านเจอว่า การ save file เป็น utf8 จะำทำให้ขนาดไฟล์ใหญ่ขึ้น เพราะ file utf8 ใช้จำนวนไบท์ในการเก็บมากกว่า file แบบ ANSI มันก็เลยเอะใจน่ะครับ ส่วน coding ที่เห็น ผมก็ถามอากู๋เอาทั้งนั้นแหละครับ แหะ ๆ ๆ คุณ talon เก่งมากๆเลยคะ นั่งแก้ นั่งงม ตั้งนานคุณทำแปปเดียวได้ -*- โดยวิธีแก้เป็นดังนี้คะ ปกติ strlen() ถ้าจะใช้กับ string ที่เป็น utf8 จะต้องนำมา convert เป็น tis620 ด้วยฟังก์ชัน utf8_to_tis620() ปัญหาในเคสนี้คือ query เป็น UTF8 ด้วย mysql_query(" SET NAMES UTF8"); มันก็เลยเก็บค่าเป็น utf8 ไว้ ก็เลยต้องแก้ด้วยการ convert กลับมาเป็น Tis620 ก่อน แล้วค่อยใช้ strlen() นับจำนวน เป็นแนวทางเผื่อใครเจอปัญหาเหมือนกัน ^^ และสุดท้ายขอบคุณ Thaiseoboard และทุกคอมเม้นมากคะโดยเฉพาะคุณ talon หัวข้อ: Re: การนับจำนวนตัวอักษรภาษาไทย โดย ไม่นับ สระ และ สัญลักษณ์ ต่างๆ ทำยังไงคะ เริ่มหัวข้อโดย: Splendith ที่ 06 กุมภาพันธ์ 2012, 19:11:07 ยินดีด้วยครับที่แก้ปัญหาได้แล้ว :)
แต่สิ่งที่ผมสงสัยอยู่คือ ทำไมในครั้งแรกๆ ใช้ mysql_query(" SET NAMES TIS620"); บวกกับฐานข้อมูลที่ใช้ TIS620 และการแสดงผลเว็บ windows-874 แล้วทำไมถึงใช้ strlen ไม่ได้ หรือเป็นเพราะไฟล์ที่ encoding เป็น utf8 เท่านั้น และอีกข้อหนึ่งคือ อ้างถึง ปัญหาในเคสนี้คือ query เป็น UTF8 ด้วย mysql_query(" SET NAMES UTF8"); ที่ผมสงสัยคือทำไม mb_strlen(,"UTF8"); ถึงใช้งานไม่ได้ เพราะ mb_strlen มันใช้นับ Multibyte Charset ในตัวมันอยู่แล้ว ใครรู้ตอบด้วยนะคร้าบ ขอบคุณครับ :wanwan017: หัวข้อ: Re: การนับจำนวนตัวอักษรภาษาไทย โดย ไม่นับ สระ และ สัญลักษณ์ ต่างๆ ทำยังไงคะ เริ่มหัวข้อโดย: DigitalM ที่ 01 ตุลาคม 2017, 00:54:53 :wanwan017: :wanwan017: :wanwan017:
|