웹마스터 팁
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
한글자르는 문제 PHP차원에서 해결된 건가?
2004.10.20 11:37
오늘 우연히 substr()을 사용하다가 홀수길이로 한글을 잘라도 정상적으로 출력되는
재밌는 현상을 목격했습니다. ^^
<?
$strOrigin = "가나다라마";
$intLen = 5;
$strOrigin = substr($strOrigin, 0, $intLen);
echo "Length: " . strlen($strOrigin) . "<p>" . $strOrigin;
/*
- 결과 -
Length: 5
가나
*/
?>
위에서 보다시피 5bytes로 자르면 보통 "가나?" 와 같이 나오는데
여기선 "가나"로 출력되네요.(그런데 문자열의 길이는 4가 아닌 5라는 신기한 사실)
제가 사용하는 환경은 Apache/1.3.31 (Win32) PHP/4.3.6입니다.
웹브라우저는 IE 5.5이고요.
PHP에서 substr()에 8bit문자의 처리를 추가한 걸까요??
아시는 분 있으면 코멘트 달아주세요.
참..혹시 한글 깨지지 않고 잘라주는 함수 필요하신분 아래 함수 참고하세요.
허접이지만 제가 만들어 봤습니다.
// $strOrigin : 잘라줄 문자열 $intLen: 자를 길이
function cut_str($strOrigin, $intLen)
{
// 빈 문자열이거나, 길이가 0이면 false 리턴.
if($strOrigin == "" || $intLen == 0)
return false;
// 문자열의 길이보다 자를 길이가 길면, 원래 문자열을 그대로 리턴
if(strlen($strOrigin) <= $intLen)
return $strOrigin;
else
{
$strTemp = substr($strOrigin, 0, $intLen);
// 자를 길이가 홀수이고 문자열이 영문자가 아닐 경우엔, 마지막 부분을 추가로 제거
if(($intLen % 2) == 1 && ord(substr($strTemp, -1, 1)) >= 128)
$strTemp = substr($strTemp, 0, -1);
return $strTemp;
}
}
재밌는 현상을 목격했습니다. ^^
<?
$strOrigin = "가나다라마";
$intLen = 5;
$strOrigin = substr($strOrigin, 0, $intLen);
echo "Length: " . strlen($strOrigin) . "<p>" . $strOrigin;
/*
- 결과 -
Length: 5
가나
*/
?>
위에서 보다시피 5bytes로 자르면 보통 "가나?" 와 같이 나오는데
여기선 "가나"로 출력되네요.(그런데 문자열의 길이는 4가 아닌 5라는 신기한 사실)
제가 사용하는 환경은 Apache/1.3.31 (Win32) PHP/4.3.6입니다.
웹브라우저는 IE 5.5이고요.
PHP에서 substr()에 8bit문자의 처리를 추가한 걸까요??
아시는 분 있으면 코멘트 달아주세요.
참..혹시 한글 깨지지 않고 잘라주는 함수 필요하신분 아래 함수 참고하세요.
허접이지만 제가 만들어 봤습니다.
// $strOrigin : 잘라줄 문자열 $intLen: 자를 길이
function cut_str($strOrigin, $intLen)
{
// 빈 문자열이거나, 길이가 0이면 false 리턴.
if($strOrigin == "" || $intLen == 0)
return false;
// 문자열의 길이보다 자를 길이가 길면, 원래 문자열을 그대로 리턴
if(strlen($strOrigin) <= $intLen)
return $strOrigin;
else
{
$strTemp = substr($strOrigin, 0, $intLen);
// 자를 길이가 홀수이고 문자열이 영문자가 아닐 경우엔, 마지막 부분을 추가로 제거
if(($intLen % 2) == 1 && ord(substr($strTemp, -1, 1)) >= 128)
$strTemp = substr($strTemp, 0, -1);
return $strTemp;
}
}
댓글 5
-
플로렐라
2004.10.20 18:13
한글은 2바이트 문자가 아닌가요? -
에지
2004.10.20 20:54
서버 환경설정에 따라 한글 잘림이 제대로 될수도 있고 안될수도 있다고 하던; -
겜방
2004.10.21 23:27
플로렐라님/
기본적으로 7bit ascii로 인코딩되는 영문자외에
한글,한문,일본어따위의 8bit로 인코딩되는 문자를
의미하는 것이었습니다.
7bit = 2^7 개의 문자를 표시할 수 있으니까
ascii 0번 ~ 127번까지가 해당되겠죠.
그래서 ord() 로 리턴되는 값이 128이상이면
한글이라고 판단하였습니다. -
영진
2004.11.01 16:00
한글과 영어가 석겼을 경우에는 어케 짜르죠? -
겜방
2004.11.06 22:14
영어를 제외한 나머지 문자들 - 한글, 한문, 일어등등 - 은 모두 한글 자르는 방식으로
자르고요, 한,영 섞여있어도 똑같이 작동합니다.
다만 "문자열의 길이"가 아닌 "문자열의 Byte" 값으로 자른다는게 정확한 표현이겠죠.
국내 사이트는 인터페이스가 한글이고, 유저들의 99%가 한국인일테니
거기에 맞춰서 자를 길이를설정하면 되지, "영어만 사용하는 외국인"이나
"한,영을 많이 섞어쓰는 사람들" 의 경우까지 다 예외처리를 해주는건
낭비같네요.
daum 카페의 덧글달기를 보면 입력상자밑에 "현재 입력된 글자의 bytes 값"을 나타내주던데
그걸 이용하면 좋을것 같기도 하고요.
제목 | 글쓴이 | 날짜 |
---|---|---|
개판 오분전 라인 그래프 [4] | 미친개 | 2004.12.01 |
실명 진위여부 확인 [10] | piasol | 2004.12.01 |
나만의 미니홈 만들기 ㅡ write.php 파일과 write_ok [5] | 예뜨락 | 2004.11.30 |
나만의 미니홈 만들기 ㅡ view.php 파일과 제목링크 [9] | 예뜨락 | 2004.11.27 |
나만의 미니홈 만들기 ㅡ list.php , 디비 테이블 생성 [6] | 예뜨락 | 2004.11.26 |
나만의 미니홈 만들기 ㅡ 게시판 list.php 파일의 모양새 [6] | 예뜨락 | 2004.11.23 |
나만의 미니홈 만들기 ㅡ 게시판의 디자인 | 예뜨락 | 2004.11.22 |
나만의 미니홈 만들기 ㅡ 미니홈 생성 페이지 [3] | 예뜨락 | 2004.11.20 |
나만의 미니홈 만들기 ㅡ 기초적인 관리 페이지 [3] | 예뜨락 | 2004.11.20 |
나만의 미니홈 만들기 ㅡ 메인 기초 설계3 .레이아웃 [2] | 예뜨락 | 2004.11.19 |
나만의 미니홈 만들기 ㅡ 메인 기초 설계2 .레이아웃 | 예뜨락 | 2004.11.18 |
나만의 미니홈 만들기 ㅡ 글쓰기에 앞서... [1] | 예뜨락 | 2004.11.17 |
[타키의 초보강좌]PHP 기초 강좌 제 2탄[mysql로 들어가보자.] [2] | 타키 | 2004.10.24 |
소수[솟수] 쉽게 구하기[에라토스테네스의 해 알고리즘사용] , 경우의 수 구하기 [5] | 타키 | 2004.10.23 |
[타키의 초보강좌]PHP 기초 강좌 제 1탄[패스워드 인증] [8] | 타키 | 2004.10.23 |
www자동 붙히기 [8] | 미오유 | 2004.10.22 |
IP to 정수변환(;) [4] | 플로렐라 | 2004.10.21 |
한글자르는 문제 PHP차원에서 해결된 건가? [5] | 겜방 | 2004.10.20 |
MySQL의 패턴 매칭 맛보기 [2] | 손상모 | 2004.10.19 |
그래프 만들어주는 소스 [10] | 미친개 | 2004.10.15 |