부분 문자열 자르기 개선(한글 및 2바이트 문자열)
컨텐츠 정보
- 22,076 조회
- 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 함수가 필요한 분이시라면
각자 테스트를 해보시고 사용하기 바랍니다.
문제가 없다면, 누군가 더 최적화 시키거나 개선하여 함께 나눌 수 있길 바랍니다. ^^
빈배...
//----------------------------------------------------------------
// 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
등록된 댓글이 없습니다.