PHP & Others

부분 문자열 자르기 개선(한글 및 2바이트 문자열)

컨텐츠 정보

본문

부분 문자열 자르기 (한글 및 2바이트 문자열) ]

//----------------------------------------------------------------
// substr for multibyte string
// substr for multibyte string
function substr_mb($str, $start, $len='', $tail='')
{
    if($len===0) return;
    $totalLen=strlen($str);
    $epos=($len>0)?(int)($start+$len):(int)($totalLen+$len);

    $s=$start-9;
    if($s<9) $s=0;
    while($s<$start) {
        if(ord($str[$s])>127) $s++;
        $s++;
    }

    $e=($epos-9);
    if($e<9) $e=0;
    $str2=substr($str,$s,$epos);
    while($e<$epos) {
        if(ord($str2[$e])>127) $e++;
        $e++;
    }

    $str=substr($str,$s,$e);
    if($totalLen>$epos) $str.=$tail;
    return $str;

} // END FUNC


//-------------------
//  사용 방법
//-------------------

사용법은 substr 함수와 같습니다.


//-------------------
//  사용 예
//-------------------

$contents="우리는 민a족 a중흥의 역사적a 사aa명c을 띄32고a
이 ed땅에 태어났다.★♣End";


echo substr_mb($contents, 0, strlen($contents)-10, "===");


for($i=1;$i<=strlen($contents);$i++)
    echo ''. $i . ":" . substr_mb($contents, 0, $i, "...");


for($i=strlen($contents);$i>=0;$i--)
    echo ''. $i . ":" . substr_mb($contents, 0, $i, "...");


//----------------------------------------------------------------


작년 초무렵  이곳에 올렸던 한글 문자열 자르기 관련 함수를
오랜만에 업그레이드(?) 해 봅니다.

멀티 바이트 문자를 가진 문자열로부터 부분 문자열을 추출했을때
mb_substr 함수는 부분 문자열을 추출하는데 있어 비교적 정확하지 않았습니다.


제 컴에서 테스트해 본 결과

▶ 실행속도는 mb_substr 함수와 비슷합니다.
(많은 테스트를 해보지 않아 정확하지는 않지만 큰 차이는 없습니다.)

▶ 멀티 바이트 문자를 가진 문자열로부터 부분문자열을 추출시
mb_substr 보다 비교적 정확하게 추출합니다.



말씀 드렸듯이 많은 테스트를 해보지 않았기에 위의 substr_mb 함수가 필요한 분이시라면
각자 테스트를 해보시고 사용하기 바랍니다.

문제가 없다면, 누군가 더 최적화 시키거나 개선하여 함께 나눌 수 있길 바랍니다. ^^

빈배...

관련자료

댓글 0
등록된 댓글이 없습니다.
Today's proverb
후회거리보다 추억거리를 많이 만들어라. 화날 때 말을 많이 하면 대개 후회거리가 생기고, 그때 잘 참으면 그것이 추억거리가 된다. (전춘호)