主頁(yè) > 網(wǎng)站建設(shè) > 建站知識(shí) > 織夢(mèng)dedecms對(duì)任意字段截取固定值并且多余部分用

織夢(mèng)dedecms對(duì)任意字段截取固定值并且多余部分用

POST TIME:2017-11-12 23:52

utf8編碼下:中文占 3個(gè)字節(jié),英文和數(shù)字占 1個(gè)字節(jié)(可變編碼)(變長(zhǎng)編碼)
gbk編碼下:所有的中文、英文、數(shù)字都占2個(gè)字節(jié)(定長(zhǎng)編碼)
例如,有一個(gè)字符串,$str = “地方見(jiàn)21423435過(guò)很多苦法dsfsdfsdgsd規(guī)和地方給iu”
如果是gbk編碼:截取5個(gè)字符 ,相當(dāng)于截取10個(gè)字節(jié) substr()截取的是字節(jié)數(shù)
如果是utf8編碼的話(huà):截取5個(gè)字符:不知道截取多少個(gè)字節(jié),因?yàn)椴淮_定是中文還是英文
那么怎么判斷呢?
通常根據(jù)一個(gè)字符的第一個(gè)字節(jié),如果這個(gè)字節(jié) 的ASCII碼 大于224 占3個(gè)字節(jié),如果第一個(gè)字節(jié)的ASCII碼,大于192 占2個(gè)字節(jié),如果第一個(gè)字節(jié)的ASCII碼小于192,占1個(gè)字節(jié)


在include下的extend.func.php文件中加入以下函數(shù):

function GetPartStr($str,$len)//$str字符串 $len 控制長(zhǎng)度
{
$one=0;
$partstr='';
for($i=0;$i<$len;$i++)
{ $sstr=substr($str,$one,1);
if(ord($sstr)>224){
$partstr.=substr($str,$one,3);
$one+=3;
}elseif(ord($sstr)>192){
$partstr.=substr($str,$one,2);
$one+=2;
}elseif(ord($sstr)<192){
$partstr.=substr($str,$one,1);
$one+=1;
}
}
if(strlen($str)<$one){
return $partstr;}else{
return $partstr.'....';
}
}

調(diào)用方法如下,比如要對(duì)電話(huà)號(hào)碼的一個(gè)字段進(jìn)行截取,前三位顯示,后面的用....代替,寫(xiě)法:

[field:tel function=GetPartStr(@me,3)/]

此教程為跟版網(wǎng)原創(chuàng),歡迎轉(zhuǎn)載。轉(zhuǎn)載請(qǐng)保留版權(quán)。



上一篇:如何讓織夢(mèng){dede:channel}無(wú)子欄目不顯示同級(jí)欄目

下一篇:織夢(mèng)Dedecms上傳中文文件不自動(dòng)改名,保持原文件

收縮
  • 微信客服
  • 微信二維碼
  • 電話(huà)咨詢(xún)

  • 400-1100-266