酷!學園
2010-09-03 13:16 *
歡迎光臨, 訪客. 請先 登入註冊一個帳號.
您忘了 啟用您的帳號嗎?

請輸入帳號, 密碼以及預計登入時間
新聞:
 
   首頁 | Study-Area | 鳥園 | 鳥哥的Linux私房菜   說明 搜尋 日曆 登入 註冊  
頁: [1]
  列印  
作者 主題: 標題的過長部份轉為『......』  (閱讀 3667 次)
0 會員 以及 1 訪客 正在閱讀本篇主題.
evilkoyou
懷疑的國中生
**
文章: 36


檢視個人資料
« 於: 2007-05-14 14:20 »

請問如果別 人發表的標題過長...
請問要這麼用php寫出....

可否大大指導?
已記錄
梁楓
俺是博士!
*****
文章: 6217



檢視個人資料
« 回覆文章 #1 於: 2007-05-14 14:44 »

mb_substr
已記錄
Yamaka
俺是博士!
*****
文章: 4095


檢視個人資料 個人網站
« 回覆文章 #2 於: 2007-05-14 14:44 »

http://tw.php.net/manual/tw/function.substr.php

http://tw.php.net/manual/tw/function.mb-substr.php
已記錄
appleboy
活潑的大學生
***
文章: 207



檢視個人資料 個人網站
« 回覆文章 #3 於: 2007-05-15 19:49 »

程式碼:
function cut_word($text, $num){
if(strlen($text) > $num) {
for($i=0;$i<$num;$i++) {
$ch=substr($text,$i,1);
if(ord($ch)>127) $i++;
}
$text= substr($text,0,$i).".";
}
return $text;
}


囧~
已記錄


歡迎來到 CodeIgniter 繁體中文討論區
My Blog:小惡魔 - 電腦技術 - 生活日記 - 美食介紹 - AppleBOY
美國職棒影片網站:http://mimi.twgg.org/
湯姆貓
活潑的大學生
***
文章: 465


檢視個人資料
« 回覆文章 #4 於: 2007-05-15 21:06 »

php內建的應該比較快吧....

再說上面那個程式碼只適用 "Big5" .....

還是有其他特殊理由要自己切???
已記錄
appleboy
活潑的大學生
***
文章: 207



檢視個人資料 個人網站
« 回覆文章 #5 於: 2007-05-19 10:19 »

引用自: "湯姆貓"
php內建的應該比較快吧....

再說上面那個程式碼只適用 "Big5" .....

還是有其他特殊理由要自己切???


PHP內建? 大大可以提供方法?

樓上我提供的方法 的確只能用在big5  抱歉 沒測試過就放上來

不過我去看了官方網 可以用 substr來做到切割 UTF-8

http://tw.php.net/manual/tw/function.substr.php#53199

程式碼:
<?php
// String intercept By Bleakwind
// utf-8:$byte=3 | gb2312:$byte=2 | big5:$byte=2
function bite_str($string, $start, $len, $byte=3)
{
    $str     = "";
    $count   = 0;
    $str_len = strlen($string);
    for ($i=0; $i<$str_len; $i++) {
        if (($count+1-$start)>$len) {
            $str  .= "...";
            break;
        } elseif ((ord(substr($string,$i,1)) <= 128) && ($count < $start)) {
            $count++;
        } elseif ((ord(substr($string,$i,1)) > 128) && ($count < $start)) {
            $count = $count+2;
            $i     = $i+$byte-1;
        } elseif ((ord(substr($string,$i,1)) <= 128) && ($count >= $start)) {
            $str  .= substr($string,$i,1);
            $count++;
        } elseif ((ord(substr($string,$i,1)) > 128) && ($count >= $start)) {
            $str  .= substr($string,$i,$byte);
            $count = $count+2;
            $i     = $i+$byte-1;
        }
    }
    return $str;
}


不過 如果使用 mb_substr 會更快

程式碼:
$string = '這是測試用';
$string = mb_substr($string, 0, 3, 'UTF-8');
echo $string;  // 會輸出 '這是測'


如果big5 就把 UTF-8 改成 big-5
已記錄


歡迎來到 CodeIgniter 繁體中文討論區
My Blog:小惡魔 - 電腦技術 - 生活日記 - 美食介紹 - AppleBOY
美國職棒影片網站:http://mimi.twgg.org/
Yamaka
俺是博士!
*****
文章: 4095


檢視個人資料 個人網站
« 回覆文章 #6 於: 2007-05-19 11:30 »

用 mb_substr 會將中文字當作一個字來計算,

如果字串內混有數字, 符號, 英文字的話,

得到結果不見得是你想要的..

例如:

程式碼:
$string = '這1是2測3試4用5';
$string1 = mb_substr($string, 0, 5, 'UTF-8');
$string2 = bite_str($string , 0, 5);
echo "$string1<br>$string2";


結果:
程式碼:
這1是2測
這1是...




在多數情形下, 我會將中文字當做是兩個字元寬,

至少在瀏覽器上顯示時通常是如此,

所以在抓字串長度時, 就要想好要用哪一種取字的方式了..
已記錄
頁: [1]
  列印  
 
前往:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006, Simple Machines LLC Valid XHTML 1.0! Valid CSS!
本頁花了 0.054 秒,以及 17 次的資料庫查詢。