메뉴 건너뛰기

프로그램언어

조회 수 564 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

3가지 함수는 해당 문자열을 원하는 길이만큼 잘라서 반환 시켜 주는 기능을 하는 함수이다.

우선 파라미터를 보면, 아래와 같다.

substr( "문자열", "자르기 시작할위치", ["반환될길이"] ); //PHP4.0이상
mb_substr( "문자열", "자르기 시작할위치", ["반환될길이"], ["문자인코딩"]); //PHP4.0이상  
iconv_substr( "문자열", "자르기 시작할위치", ["반환될길이"], ["문자인코딩"] ); //PHP 5.0이상


보통 substr을 쓰면 영문자는 잘 잘라질것이다. 하지만 한글을 자르면 잘리는 끝부분의 한글이 깨져나오는것을 종종 볼수 있을것이다. substr이 1byte씩 자르기 때문에, 2byte인 한글이 깨지곤 하는것인데, 그래서 필요한것이 mb_substr(), iconv_substr() 이다.
두 함수의 마지막에 "UTF-8" 과 같은 해당 페이지의 인코딩을 넣어주면, 한글도 안깨지고 잘 잘려서 나오는 것을 볼수 있을 것이다.

해당 자르기 함수들에 대한 좀더 자세한 사용법은(뒤에서부터 자른다던가, 하는식으로도 사용가능 하니까..) 아래의 substr() 메뉴얼을 참조하기 바란다. 인코딩이 포함된다는것 빼고는 3가지 함수의 기본 자르기 사용법은 같다.
참조 : http://php.net/manual/kr/function.substr.php

자 그럼 3가지 함수의 가장 큰 차이점은 뭘까? 사실 필자도.. 잘 모르겠다.. 특히 mb_substr()과 iconv_substr()은.. 기능적으로는.. 차이도 없는거 같고 말이다.
하지만, 함수 내부적으로는 차이가 꾀 있나 보다. 아래의 소스를 보자

$str = str_repeat("b1ix",100000);

$time = microtime(true);
iconv_substr($str,1000,90000,'UTF-8');
echo "iconv_substr : " . (microtime(true)-$time) . "<br><br>";
 
$time = microtime(true);
mb_substr($str,1000,90000,'UTF-8');
echo "mb_substr : " . (microtime(true)-$time) . "<br><br>";

$time = microtime(true);
substr($str,1000,90000);
echo "substr : " . (microtime(true)-$time) . "<br><br>";
 
iconv_substr : 0.0253469944

mb_substr : 0.000370025634766

substr : 1.19209289551E-5

대충 설명하자면, 위의 소스는 각함수의 실행시간을 micro타임으로 잰것이다.
뭐 php 버전이나 사용자의 환경에 따라서 iconv_substr()이 substr()보다 더 오래 걸리는 경우도 있다고 하는데, mb_substr()은 항상 제일 빠르다고 한다.
참고 : http://css.dzone.com/news/iconvsubstr-vs-mbstringsubstr

더 자세히 알고 싶다면, 위 링크들에서 알아보기 바란다.


List of Articles
번호 제목 날짜 조회 수
180 헤더이용 다운로드 받을시 바로열기부분 소스 2018.07.24 7322
179 [이클립스]PHP 개발환경 만들기 file 2018.07.04 7941
178 MySQL(MariaDB) 테이블 만들기 2018.03.28 8154
177 AJAX를 활용하여 JSON 댓글 처리하기 (PHP) 2018.07.04 8456
176 PHP에서 암호화 encrypt 복호화 decrypt 해서 값을 넘기기 2018.02.09 10626
175 PHP 네이버블로그 원격 글쓰기 API 소스 file 2018.02.09 12465
174 base64 인코딩/디코딩 함수의 특징 file 2018.02.09 13078
173 메일주소의 골뱅이를 그림처리하기 2017.03.06 15508
172 php 문자열관련 함수 2017.03.06 15580
171 php로 db 컨트롤 1 2017.03.06 15769
170 PHP의 유동변수!? - $a1 ~ $a2 같은 형식의 변수를 반복문 돌릴때... 2017.03.06 16610
169 PHP 날짜, 시간 관련 함수. date(), mktime() 2017.03.06 16707
168 php 내장함수 2017.03.07 17004
167 PHP 만년달력 소스 2017.03.06 17063
166 www가 붙은 도메인과 안붙은 같은 도메인, 로그인 세션 유지 2017.03.07 17080
165 지엠 웹에디터 v1.1 (저작권표시없음)| file 2017.03.06 17109
164 PHP에서 Excel 파일을 만들 수 있는 PHPExcel file 2017.03.06 17112
163 게시판 페이징 기법과 개념 file 2017.03.06 17323
162 시간관련함수 2016.12.23 17328
161 엑셀(*.xls) 화일을 PHP에서 읽기 2017.03.06 17474
Board Pagination Prev 1 ... 4 5 6 7 8 9 10 11 12 13 ... 17 Next
/ 17

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved