Feb
08
2008

function ตัดคำแบบสิ้นคิด

945 views

admin บ.ลูกค้า: ทำไมกรอก form สมัครงานแล้วมันไม่ขึ้นบรรทัดใหม่หล่ะ
admin บ.ลูกค้า: ทำไม post webboard แล้วมันไม่ขึ้นบรรทัดใหม่หล่ะ หน้าจอกว้างเกิน print ไมได้

ข้อมูลตัวอย่างที่เขา post เข้ามา test พิมพ์แบบให้ยาวเป็น กิโลเมตร เลย
(ตัวอย่างขอขึ้นบรรทัดนะครับไม่งั้นไม่สวย)

111111111111111111111111111111111111111111111111111111111111111111111111111111
111111111111111111111111111111111111111111111111111111111111111111111111111111
111111111111111111111111111111111111111111111111111111111111111111111111111111

ต้นตอของปัญหาคือ browser (IE,FireFox,ฯลฯ) มันไม่เจอช่องว่างระหว่างคำทำให้
มันตัดขึ้นบรรทัดใหม่ไม่ได้

ทำไมถึงชอบ test case นี้จัง ส่วนตัวผมคิดว่าถึงจะพิมพ์ไทย ยังไงมัน
ก็ต้องเว้นวรรคกันบ้าง พอเจอคน test แบบนี้ทีไรรู้สึกขัดใจยังไงพิกล มันทนไม่ไหว
จริงอยู่ว่า case แบบนี้อาจเกิดขึ้นได้บ้างในกรณี กรอกเพลิน จนลืมเว้นวรรค

แต่ถ้ามองในความเป็นจริงแล้ว ถ้าผมจะไปกรอกฟอร์มสมัครงาน หรือ post กระทู้
ถ้าไม่ใช่เพื่อมาป่วนให้มันตัดคำไม่ได้ขึ้นหน้ายาวๆ แล้วผมก็ไม่มี
เหตุผลที่จะกรอกให้ยาวขนาดนั้น เพราะอะไร คิดง่ายๆ ถ้าคุณเป็นเจ้าของบ. รับสมัครงาน
เจอคนพิพม์ประวัติแนะนำตัวเองยาวเป็นกิโลโดยไม่เคาะวรรคเลยคุณจะคิดยังไง

แต่เหนือสิ่งอื่นใด ช่างมันใครจะคิดไง ลูกค้าอยากได้เราก็ไม่ขัดใจ
เลยเป็นที่มาของ function ตัดคำแบบสิ้นคิด นี้ ซึ่งแก้ไขโดยการเติม tag <wbr>
เข้าไปเพื่อให้ browser ตัดคำได้สวยงาม

ASP

Dim strString
strString  = "A01234567890123456789012345678901234567890123456789Z"
Response.Write(addWbr(strString))
 
Function addWbr(byval strString)
 Dim intStringLen, intCount, strSingleString, strNewString
 intStringLen = len(strString)
 For intCount = 1 to intStringLen
  strSingleString = Mid(strString,intCount,1)
  strNewString = strNewString & strSingleString & "<wbr>"
 Next
 addWbr = strNewString
End Function

PHP (เลียนแบบ asp ด้านบน)

$strString  = "A01234567890123456789012345678901234567890123456789Z";
echo addWbr($strString);
 
Function addWbr($strString) {
 $intStringLen = strlen($strString) - 1;
 for ($intCount=0;$intCount<=$intStringLen;$intCount++) {
  $strSingleString = substr($strString,$intCount,1);
  $strNewString .= "$strSingleString<wbr>";
 }
 return $strNewString;
}

PHP (เขียนอีกแบบ)

$strString  = "A01234567890123456789012345678901234567890123456789Z";
echo addWbr($strString);
 
Function addWbr($strString) {
 $strStrings = preg_split("//", $strString, -1, PREG_SPLIT_NO_EMPTY);
 foreach ($strStrings as $strSingleString) {
  $strNewString .= "$strSingleString<wbr>";
 }
 return $strNewString;
}

* ทิ้งท้ายไว้ว่าใครจะเอาไปใช้ระวัง validate W3C ไม่ผ่านเพราะ <wbr> นะครับ


Written by Pipo in: Web Developer | Tags: , ,

No Comments »

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress | Aeros Theme | TheBuckmaker.com WordPress Themes