2013年12月5日 星期四

PHP:計算顯示長度

程式碼:

<?php

/*
用途:計算顯示長度
Author: Ron Lee
Date: 20150805
*/
function strlen_utf8_show($str){
 // Ron L
    $count = 0;//累計顯示長度
    $strLen = strlen($str);//原始字串長度
    $accStrLen = 0;  //累計字串長度
    $accShowLen = 0; //累計顯示長度
    $currStrLenPos = 0; //當前字符的起始位置 (byte)
    $currChrNum = 0; //第幾個字符
    $currChr = ''; //當前字元

    while($currStrLenPos < $strLen){
        $currChr = mb_substr($str,$currChrNum,1,'utf8');
        $asciiChr = ord($currChr);

        if($asciiChr<128){
            $thisChrLen = 1;//字串長度
            $thisChrShowLen = 1;//字串顯示長度
        }
        elseif($asciiChr<192){
            //no data
            continue;
        }
        elseif($asciiChr<224){
            $thisChrLen = 2;//字串長度
            $thisChrShowLen = 2;//字串顯示長度
        }
        elseif($asciiChr<240){
            $thisChrLen = 3;//字串長度
            $thisChrShowLen = 2;//字串顯示長度
        }
        elseif($asciiChr<248){
            $thisChrLen = 4;//字串長度
            $thisChrShowLen = 2;//字串顯示長度
        }
        elseif($asciiChr<252){
            $thisChrLen = 5;//字串長度
            $thisChrShowLen = 1;//字串顯示長度
        }
        elseif($asciiChr<254){
            $thisChrLen = 6;//字串長度
            $thisChrShowLen = 1;//字串顯示長度
        }
        $accStrLen += $thisChrLen;
        $accShowLen += $thisChrShowLen;
        $currStrLenPos += $thisChrLen;
        $currChrNum ++;
    }
    return $accShowLen;
}
?>

沒有留言:

張貼留言