utf-8 문자열 자르기.
글쓴이: cdpark / 작성시간: 일, 2003/07/20 - 9:24오전
utf-8 문자열 자르기 함수를 php 코드로 만들어봤습니다. 주어진 길이보다 짧게 재단하는 함수죠. (제 첫 php 코딩인 듯.)
function u8_strcut($str, $limit) /* Note: */ /* $str must be a valid UTF-8 string */ /* it may return an empty string even if $limit > 0 */ { $len= strlen($str); if ($len<= $limit ) return $str; $len= $limit; /* ASCII are encoded in the range 0x00 to 0x7F * The first byte of multibyte sequence is in the range 0xC0 to 0xFD. * All furthur bytes are in the range 0x80 to 0xBF. */ while ($len > 0 && ($ch = ord($str[$len])) >= 128 && ($ch < 192)) $len --; return substr($str, 0, $len); }
mb_strcut() 함수를 쓸 수 없는 상황에서 UTF-8를 위해 쓰도록 만든 겁니다. (drupal 때문이라고는...)
php 전문가 분이 좀 더 성능이나 코딩 스타일 등을 손봐주세요.
순선 님의 해법은 어떤 것인가요?
Forums:
순선 님은 아니지만 답변을 달겠습니다 :-) 제가 쓰는 함수는 다음과 같
순선 님은 아니지만 답변을 달겠습니다 :-) 제가 쓰는 함수는 다음과 같습니다.
이 함수의 제한 사항은, 반드시 valid UTF-8 string 이어야 한다는 겁니다. ASCII code 0~127인 문자는 1글자로 치고 멀티바이트 문자는 2글자로 칩니다. 게시판의 제목 자를때 쓰는 함수라서... $suffix는 문자 길이가 $max_len 보다 길 경우에, 잘라내고 그 뒤에 붙일 문자열을 뜻합니다.
$str = cut_string_utf8("abcdefg", 4, "...");
라 하면 $str = "abcd..."; 가 되는 겁니다.
[quote="lsj0713"]순선 님은 아니지만 답변을 달겠습니다 :-
문제는 한글이 유니코드 상황에서 3글자로 되어 있다는 것입니다.
3바이트를 넘는 경우까지는 처리하지 않고 그냥 테스트 성으로 예전에 만들
3바이트를 넘는 경우까지는 처리하지 않고 그냥 테스트 성으로 예전에 만들어 놓은 코드가 있어서 저도 흐흐흐
http://mytears.org/resources/mysrc/php/base64/test.php
http://mytears.org/resources/mysrc/php/unicode/utf8.php
http://b.mytears.org/2005/11/28/rfc2047-message-header-extensions-for-non-ascii-text/
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
[quote]문제는 한글이 유니코드 상황에서 3글자로 되어 있다는 것입니
[b]lsj0713[/b]님의 코드에서[code:1]if (
lsj0713님의 코드에서
if ( $noc >= $max_len ) { break; }
부분을
if ( $noc > $max_len ) { break; }
로 바꿔줘야 ascii 도 제대로 자를 수 있습니다.
[quote="lsj0713"]순선 님은 아니지만 답변을 달겠습니다 :-
제가 듣기론 저 위의 코드는 현제 UTF-8의 규격(?)에 맞지 않는다고 들었습니다.
(사실인지는 잘 모르지만요 ~_~)
지건 6바이트 까지 처리 해 주지만 현제까지는 6바이트 까지 언어가 정해져 있지 않다고 들었습니다.
댓글 달기