웹마스터 팁
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
참조 : http://allzza.net/maddog/test.html
앞전에 이 게시판에 올렸었는데 의도한대로 작동을 하지 않아 삭제 했다가
수정 해서 다시 올려봅니다.
substr() 함수로 글자를 자를때 2바이트 문자의 깨짐을 없애줍니다.
앞전에 이보다 훨씬 간단한 소스를 본듯 한데
그 비슷한 소스를 해보니 글이 깨지더군요.
<?
echo "<form action=$PHP_SELF>
자를 문자열 : <input type=text size=35 name=start value="$start"><br>
자를 길이 : <input type=text size=5 name=end value=$end><input type=submit value="^___^"></form>";
echo "자를문자열 : $start<br>
자를 길이 : $end<br><br>
<b>자르고 난 문자열 : ".cut_str($start,$end)."</b>";
function cut_str($str,$length) {
$temp = "";
$ret_str = "";
if(strlen($str) > $length) $dot = "....";
for($i=0;$i<$length;$i++) {
$b = bin2hex(substr($str,$i,1));
if(hexdec($b) < 127 && $temp == "") $ret_str .= chr(hexdec($b));
else {
if($temp == "") $temp = $b;
else {
$temp .= $b;
$ret_str .= hex2bin($temp);
$temp = "";
}
}
}
return $ret_str.$dot;
}
function hex2bin($str) { //-- bin2hex 의 역함수
$ret_str = "";
for($i=0;$i<strlen($str);$i+=2) {
$ge_str = substr($str,$i,2);
$ret_str .= chr(hexdec($ge_str));
}
return $ret_str;
}
?>
글자 깨짐 없이 문자열 자르기(hex2bin 함수 이용)
2003.04.05 13:05
참조 : http://allzza.net/maddog/test.html
앞전에 이 게시판에 올렸었는데 의도한대로 작동을 하지 않아 삭제 했다가
수정 해서 다시 올려봅니다.
substr() 함수로 글자를 자를때 2바이트 문자의 깨짐을 없애줍니다.
앞전에 이보다 훨씬 간단한 소스를 본듯 한데
그 비슷한 소스를 해보니 글이 깨지더군요.
<?
echo "<form action=$PHP_SELF>
자를 문자열 : <input type=text size=35 name=start value="$start"><br>
자를 길이 : <input type=text size=5 name=end value=$end><input type=submit value="^___^"></form>";
echo "자를문자열 : $start<br>
자를 길이 : $end<br><br>
<b>자르고 난 문자열 : ".cut_str($start,$end)."</b>";
function cut_str($str,$length) {
$temp = "";
$ret_str = "";
if(strlen($str) > $length) $dot = "....";
for($i=0;$i<$length;$i++) {
$b = bin2hex(substr($str,$i,1));
if(hexdec($b) < 127 && $temp == "") $ret_str .= chr(hexdec($b));
else {
if($temp == "") $temp = $b;
else {
$temp .= $b;
$ret_str .= hex2bin($temp);
$temp = "";
}
}
}
return $ret_str.$dot;
}
function hex2bin($str) { //-- bin2hex 의 역함수
$ret_str = "";
for($i=0;$i<strlen($str);$i+=2) {
$ge_str = substr($str,$i,2);
$ret_str .= chr(hexdec($ge_str));
}
return $ret_str;
}
?>
댓글 13
-
TheMics
2003.04.05 13:19
-
미친개
2003.04.06 05:09
MYMINT //
꼭 공백 때문에 짜를 부분의 찌끄러기가 붙는것은 아닌듯 합니다.
공백과는 상관 없이 칼 댈 부분에 마디가 없으면 찌끄러기가 붙는거....같은데요 ^^;;;;;; -
TheMics
2003.04.06 14:10
자세한 설명을 드리자면->
다음 30바이트 문자열을 15번째에서 자른다고 합시다.
012345678901234567890123456789
이 경우 4와 5 사이에서 짤라서 아무런 문제도 없이 012345678901234로 짤리게 되죠.
하지만 2바이트 문자, 즉 한글,한자, 일어 따위에는 문제가 생깁니다.
0122345678가나다라마바사아자차
이 문자열 역시 전체 30바이트입니다. 이것을 15번째에서 자른다면 우리의 사고방식으로는 "마"와"바"사이에서 짤라야 하겠죠. "가","나"따위를 한 분자로 보기 때문입니다.
하지만 컴퓨터에서는 "가"와 "나"를 2글자, 즉 2바이트로 처리합니다. 15번째에서 짜르라는 명령 역시 15바이트째에서 짜르라는 말로 인식하죠.
결국 "다"의 앞은 14바이트이고 뒤는 16바이트이므로 PHP에서는 "다"의 중간을 짜릅니다. 문자를 반으로 짤라버리는 거죠. 결국 "다"를 반으로 짜르게 됨으로써 이상한 문자가 생기고, 그것을 ?로 표시하게 됩니다.
결과물은
0122345678가나?
가 됩니다. 전체 15바이트로 정확하게 짜른겁니다. -
MYMINT
2003.04.05 20:37
들어간 공백 길이를 알아내서 자를 길이+공백 길이로 잘라내면 낫지 않을까요;; -
TheMics
2003.04.06 14:12
저 ?를 방지하기 위해 아스키코드를 인식해 보여주는 방법입니다. 아스키코드의 경우 127까지는 1바이트 문자(1,2,A,B,c,d,%,$따위)로 인식하므로 짜를 위치의 문자 코드값이 128 이상의 경우, 즉 2바이트 문자의 경우 그 뒤나 앞에서 짤라주는 겁니다. -
미친개
2003.04.05 15:18
TheMics //
조언 감사합니다.(--)(__)(--)
하지만 꼭 꼬랑지에 남는 2바이트 문자의 찌끄러기가 ? 가 아닐때도 있어 문제가 되더군요 -
초보겨울
2003.04.14 10:34
넘 어렵다 ...ㅠ_ㅜ -
sMokaHallo
2003.05.17 07:30
substr()로 짜른 다음에 ereg로 ? 오호호 그런방법이 있었군요...
그런데 혹시 한글 10자하고 영문 이나 숫자 특히 숫자 10자 길이 차이 정복하신분 없나요??
ㅡ,.ㅡ;;; -
오승만
2004.04.21 21:29
저도 이문제로 많이 고민을 했는데요..
가장 무식하면서 가장 간단하면서 가장 정확한 방법은
substr로 자른다음 ord로 아스키 값을 구해서 그 값이 한글인지여부를판단해서
더 길게 자를건지 그냥 자를건지를 판단하는 거더군요..
이걸로 3일간 삽질을 해본결과 제로보드 에서도 그렇고 나보드에서도 그러하고
인터넷에서 검색을 해봐도 그렇고..
위의 한가지 방법밖에 없더군요...
물론... 머리를 더 쓰다보면 좀더 좋은 방법이 있겠지만... -
오승만
2004.04.21 21:30
제로님과 나보드제작자님의 소스를 보지 않고 만들었는데도 만들고 나니까
글자하나 안틀리고 똑같이 나오더군요... -.-;; -
강준호
2008.07.27 04:38
이거 글 올라온지가 하도 오래돼서 미친개님이 이 글 보실런지는 모르겠지만.....
UFT-8 환경에서는 이게 안먹히네요...
왜케 그냥 잘리는지...
UFT-8 환경에서 어케해줘야 하는건가요? -
asd
2008.09.23 11:23
mysql에서 잘라서 출력하세요.... 애초에 이런 고민을 안하게 됨... -
용시리
2011.10.28 16:14
1. HTML 로 된 내용에서 태그를 제외한 글자만 뽑아내고 싶을때
strip_tags(preg_replace('!<img([^\>]*)src="([^\>]*?)\>!is', '',$contents))
2. 한글을 100바이트까지만 잘라낼때 깔끔하게 잘라내는 방법
mb_substr($contents,0,100, 'UTF-8');
저는 이런식으로 하니까 되더라고요.
홈페이지에도 놀러오세요. www.yoonz.net 이예요.
제목 | 글쓴이 | 날짜 |
---|---|---|
E-Mail을 ID로 사용하기 [3] | June Oh | 2010.02.25 |
공용 head內선언문들은 /common/tpl/common_layout.html | 인터니즈2 | 2011.11.04 |
[레이아웃관련] 구글검색 달기 | 인터니즈2 | 2011.11.04 |
mp4 파일을 JW Media Player에 재생할 수 있도록 변경하기 [5] | 세비군 | 2010.05.26 |
글자 깨짐 없이 문자열 자르기(hex2bin 함수 이용) [13] | 미친개 | 2003.04.05 |
1.4.5.10->1.5.06 전환 성공기 executeQuery오류 문제및 다량 문제 발생해결 [2] | phonetest | 2011.10.21 |
더블클릭으로 페이지 위,아래 이동하기 [4] | 라싸 | 2011.09.22 |
리플카운터 [3] | 인터니즈2 | 2011.10.25 |
Error has occurred while connecting DB 에러에 관한 해결법 | 안녕하소 | 2011.10.26 |
XE 이클립스 개발환경 만들기 [7] | 행키 | 2011.10.19 |
[동영상강좌] 홈페이지에 BGM을 달아보자 [5] | 서기 | 2007.01.10 |
글쓴이에 이름과 닉네임 같이표시하기 [3] | 천재경 | 2011.10.20 |
글작성후 목록으로 이동하기 [8] | ezi | 2011.07.08 |
xe_board 스킨에서 제목 윗 부분이 짤리는 경우.. [1] | 천재경 | 2011.10.19 |
메타태그(Meta)의 모든것 [11] | ZipShin | 2002.06.20 |
홈페이지 접속시 XE를 바로 실행하기(XE를 /xe/ 폴더에 설치한 경우) [5] | Firstlove | 2011.06.12 |
관리툴 회원관리에서 확장변수로 검색 시 숫자 이외 검색불가 해결 방법 | 카리브 | 2011.10.10 |
PHP 5.3.x DEPRECATED 에러 해결하기 [2] | 난다날아 | 2011.01.21 |
The result is not valid XML 오류중 하나 해결 | 쿨럭이 | 2011.10.10 |
큰 파일의 썸네일이 안생길때 해결방법-추가 [7] | HIKARU | 2008.03.18 |
일반적으로 쓰이는게 짜르는 부분의 코드값이 127 이상, 즉 2바이트 문자일때글 구분해서 짜르는거고, 위 방법은 그보다 고단수네요^^