#1
|
|||
|
|||
請教程式語言 (PHP) 達人
請教一下各位,
我發現我架的那支二手市場PHP有一個嚴重的bug 原因是下面這段程式碼: if(strlen($title)>15) $title=substr($title,0,15)."..."; 這段碼的作用是當我輸入的拍賣物title超過15個字元時 它在首頁顯示時會自動將第16個字之後省略為"..." 也就是當我輸入"12345678910111213141516" (23個字元), 經由這段程式碼的作用會變成"123456789101112..." (15個字元+"...") 但由於一個中文字等於2字元, 當我輸入"一二三四五六七八" (16字元)時 經由這段程式碼作用後會變成"一二三四五六七?..." (15字個字元+"...") 因為第15與16字元共同組成了"八"這個中文字, 但由於第16個字元後面都被省略了... 所以該拍賣訊息第15個字元會成為"?"(問號) 請參見 http://www.bazaar.info 請問有沒有辦法設定遇到第15個字元是中文字時, 此程序會變為第17個字元後才省略成"..." 或是有沒有其它辦法能解決這個問題? 希望懂的人能幫忙, 拜託拜託!
__________________
1515 |
#2
|
|||
|
|||
if(strlen($title)>15) $title=substr($title,0,15)."...";
會不會只要把15改大就好了阿??
__________________
|
#4
|
|||
|
|||
那把15改成50不就可以輸入25個中文字了嗎 ^^
__________________
|
#6
|
|||
|
|||
我只懂道理,不知怎麼回答....
字串 >= 16時 取15碼+"..." 但第15碼為中文的 "第一碼" 時,會變 ? 號 程式中,應該在上面的判斷式成立時, 再判斷第15個字元的ASC II碼 是否大於中文在ASC II中的編碼 若為真,則取14碼 + "..." 若為否,則取15碼以內 PHP應該有函數可以判斷字串中,某一位置的ASC II碼吧... 若無法直接判斷... 那就用一個 "變數 = 第15碼" 再用 ASC II的函數,來判斷他在ASC II中的編碼 應該就可以了
__________________
Gamer.info |
#7
|
|||
|
|||
中文字第一碼和第二碼的 ASCII 都有可能超過 128,無法直接判斷出某字元是否屬於中文的第一碼。要判斷的話可試試由字串前頭開始一個個字元去判斷,遇到 ASCII 大於 128 則視為中文字的第一碼,則下一個字元視為中文字第二碼,依此方式繼續判斷下去,則可知道第 15 個字元是否為中文字第一碼。除非字串中用到特殊字元,否則通常結果會是正確的。
|
#8
|
|||
|
|||
dp老大你那支程式是什麼編碼
我把模組copy給你....你替換上去就OK了 這是中文典型的問題... |
#9
|
|||
|
|||
小弟喜歡使用 萬國碼 utf-8 ,字元數都統一 ,然後用 mb_substr() 此 funtion 來切割字串即不會有上述問題
|
#10
|
|||
|
|||
mb_substr好像要mbstring.dll這個模組才能支援...
|