-
[PHP] 문자열 부분 가져오기 (substr, mb_substr)프로그래밍/PHP 2017. 12. 18. 11:31
▶PHP 문자열 부분 가져오기 (substr, mb_substr)
▶설명
substr 함수
PHP 함수인 substr 함수에 대해 php.net에서는 아래와 같이 설명하고 있습니다.문자열의 일부를 반환합니다.그렇지만, 해당 함수는 영문 문자열에 바이트를 기준으로 가져오는 함수입니다.UTF-8 문서에 경우 각 문자를 1~4Byte까지 사용하므로, 한글은 문자에 일부를 가져오는 경우 깨지는 경우가 있습니다.그렇기 때문에 우리는 이를 해결 할 수 있는 함수인 mb_substr에 대해서도 함께 알아보겠습니다.
mb_substr 함수
PHP 함수인 mb_substr은 php.net에서 substr과 동일한 설명을 가지고 있습니다.문자열의 일부를 반환합니다.
그러면 무엇이 틀린 걸까요?
그건 바로 사용하는 인수 값이 틀립니다.
substr은 문자열, 시작 지점, 길이만을 인수로 사용하지만,
mb_substr은 문자열, 시작 지점, 길이, 현재 파일의 인코딩(=문자셋 혹은 charset)을 인수로 사용합니다.
mb_substr 함수를 이용하면 한글 문자열의 일부도 문제없이 가져올 수 있습니다.
▶사용법
강조 처리된 부분만 필수 입력 사항입니다.
substr( 문자열 , 시작 지점, 길이 )
mb_substr( 문자열 , 시작 숫자, 길이 , 인코딩 = mb_internal_encoding() )
* 시작 숫자 :
- 음수가 아닌 경우 : 문자열의 처음을 0부터 세서, 시작 숫자 자리에서 시작한 문자열의 일부를 가져옵니다. (예를 들어, 문자열 'abcdef'에서 위치 0의 문자는 'a'이고, 위치 2의 문자는 'c'입니다.
- 음수인 경우 : 문자열의 끝을 기준으로 문자열의 일부를 가져옵니다.
- 문자열 길이보다 시작 숫자가 작은 경우, FALSE를 반환합니다.
* 길이 :
- 생략된 경우 : 시작 숫자부터 문자열의 끝까지를 가져옵니다.
- 양수인 경우 : 시작 숫자부터 길이만큼에 문자열의 일부를 가져옵니다.
- 음수인 경우 : 문자열의 끝부터 음수만큼의 문자를 제외한 문자열을 가져옵니다.
- 0인 경우 : FALSE 또는 NULL, 빈 무자열이 반환됩니다.
* 인코딩 : 값을 입력하지 않으면, 기본 문자 인코딩에서 사용되는 문자 인코딩을 가져옵니다. [참고 ]
▶substr 함수 예제
코드
<?php $example_english = "Hello world!"; echo "영어 : ".$example_english."<br/>"; echo "시작이 양수인 경우 #1 : ".substr($example_english, 1).'<br/>'; echo "시작이 양수인 경우 #2 : ".substr($example_english, 2).'<br/>'; echo "시작이 양수인 경우 #3 : ".substr($example_english, 3).'<br/>'; echo "시작이 양수인 경우 #4 : ".substr($example_english, 3, 3).'<br/>'; echo "시작이 양수인 경우 #5 : ".substr($example_english, 3, -1).'<br/>'; echo "시작이 양수인 경우 #6 : ".substr($example_english, -3, -1).'<br/>'; echo "<br/>"; echo "시작이 음수인 경우 #1 : ".substr($example_english, -1).'<br/>'; echo "시작이 음수인 경우 #2 : ".substr($example_english, -2).'<br/>'; echo "시작이 음수인 경우 #3 : ".substr($example_english, -3, 1).'<br/>'; echo "시작이 음수인 경우 #4 : ".substr($example_english, -3, -1).'<br/>'; echo "<br/>"; $example_korean = "안녕하세요. 세상!"; echo "한글 : ".$example_korean."<br/>"; echo "시작이 양수인 경우 #1 : ".substr($example_korean, 1).'<br/>'; echo "시작이 양수인 경우 #2 : ".substr($example_korean, 2).'<br/>'; echo "시작이 양수인 경우 #3 : ".substr($example_korean, 3).'<br/>'; echo "시작이 양수인 경우 #4 : ".substr($example_korean, 3, 3).'<br/>'; echo "시작이 양수인 경우 #5 : ".substr($example_korean, 3, -1).'<br/>'; echo "시작이 양수인 경우 #6 : ".substr($example_korean, -3, -1).'<br/>'; echo "<br/>"; echo "시작이 음수인 경우 #1 : ".substr($example_korean, -1).'<br/>'; echo "시작이 음수인 경우 #2 : ".substr($example_korean, -2).'<br/>'; echo "시작이 음수인 경우 #3 : ".substr($example_korean, -3, 1).'<br/>'; echo "시작이 음수인 경우 #4 : ".substr($example_korean, -3, -1).'<br/>'; ?>
결과
영어 : Hello world! 시작이 양수인 경우 #1 : ello world! 시작이 양수인 경우 #2 : llo world! 시작이 양수인 경우 #3 : lo world! 시작이 양수인 경우 #4 : lo 시작이 양수인 경우 #5 : lo world 시작이 양수인 경우 #6 : ld 시작이 음수인 경우 #1 : ! 시작이 음수인 경우 #2 : d! 시작이 음수인 경우 #3 : l 시작이 음수인 경우 #4 : ld 한글 : 안녕하세요. 세상! 시작이 양수인 경우 #1 : ��녕하세요. 세상! 시작이 양수인 경우 #2 : �녕하세요. 세상! 시작이 양수인 경우 #3 : 녕하세요. 세상! 시작이 양수인 경우 #4 : 녕 시작이 양수인 경우 #5 : 녕하세요. 세상 시작이 양수인 경우 #6 : �� 시작이 음수인 경우 #1 : ! 시작이 음수인 경우 #2 : �! 시작이 음수인 경우 #3 : � 시작이 음수인 경우 #4 : ��
▶mb_substr 함수 예제
코드
<?php define('SERVER_CHARSET', 'UTF-8'); $example_english = "Hello world!"; echo "영어 : ".$example_english."<br/>"; echo "시작이 양수인 경우 #1 : ".mb_substr($example_english, 1, NULL, SERVER_CHARSET).'<br/>'; echo "시작이 양수인 경우 #2 : ".mb_substr($example_english, 2, NULL, SERVER_CHARSET).'<br/>'; echo "시작이 양수인 경우 #3 : ".mb_substr($example_english, 3, NULL, SERVER_CHARSET).'<br/>'; echo "시작이 양수인 경우 #4 : ".mb_substr($example_english, 3, 3, SERVER_CHARSET).'<br/>'; echo "시작이 양수인 경우 #5 : ".mb_substr($example_english, 3, -1, SERVER_CHARSET).'<br/>'; echo "시작이 양수인 경우 #6 : ".mb_substr($example_english, -3, -1, SERVER_CHARSET).'<br/>'; echo "<br/>"; echo "시작이 음수인 경우 #1 : ".mb_substr($example_english, -1, NULL, SERVER_CHARSET).'<br/>'; echo "시작이 음수인 경우 #2 : ".mb_substr($example_english, -2, NULL, SERVER_CHARSET).'<br/>'; echo "시작이 음수인 경우 #3 : ".mb_substr($example_english, -3, 1, SERVER_CHARSET).'<br/>'; echo "시작이 음수인 경우 #4 : ".mb_substr($example_english, -3, -1, SERVER_CHARSET).'<br/>'; echo "<br/>"; $example_korean = "안녕하세요. 세상!"; echo "한글 : ".$example_korean."<br/>"; echo "시작이 양수인 경우 #1 : ".mb_substr($example_korean, 1, NULL, SERVER_CHARSET).'<br/>'; echo "시작이 양수인 경우 #2 : ".mb_substr($example_korean, 2, NULL, SERVER_CHARSET).'<br/>'; echo "시작이 양수인 경우 #3 : ".mb_substr($example_korean, 3, NULL, SERVER_CHARSET).'<br/>'; echo "시작이 양수인 경우 #4 : ".mb_substr($example_korean, 3, 3, SERVER_CHARSET).'<br/>'; echo "시작이 양수인 경우 #5 : ".mb_substr($example_korean, 3, -1, SERVER_CHARSET).'<br/>'; echo "시작이 양수인 경우 #6 : ".mb_substr($example_korean, -3, -1, SERVER_CHARSET).'<br/>'; echo "<br/>"; echo "시작이 음수인 경우 #1 : ".mb_substr($example_korean, -1, NULL, SERVER_CHARSET).'<br/>'; echo "시작이 음수인 경우 #2 : ".mb_substr($example_korean, -2, NULL, SERVER_CHARSET).'<br/>'; echo "시작이 음수인 경우 #3 : ".mb_substr($example_korean, -3, 1, SERVER_CHARSET).'<br/>'; echo "시작이 음수인 경우 #4 : ".mb_substr($example_korean, -3, -1, SERVER_CHARSET).'<br/>'; ?>
결과
영어 : Hello world! 시작이 양수인 경우 #1 : ello world! 시작이 양수인 경우 #2 : llo world! 시작이 양수인 경우 #3 : lo world! 시작이 양수인 경우 #4 : lo 시작이 양수인 경우 #5 : lo world 시작이 양수인 경우 #6 : ld 시작이 음수인 경우 #1 : ! 시작이 음수인 경우 #2 : d! 시작이 음수인 경우 #3 : l 시작이 음수인 경우 #4 : ld 한글 : 안녕하세요. 세상! 시작이 양수인 경우 #1 : 녕하세요. 세상! 시작이 양수인 경우 #2 : 하세요. 세상! 시작이 양수인 경우 #3 : 세요. 세상! 시작이 양수인 경우 #4 : 세요. 시작이 양수인 경우 #5 : 세요. 세상 시작이 양수인 경우 #6 : 세상 시작이 음수인 경우 #1 : ! 시작이 음수인 경우 #2 : 상! 시작이 음수인 경우 #3 : 세 시작이 음수인 경우 #4 : 세상
'프로그래밍 > PHP' 카테고리의 다른 글
[PHP] 문자 인코딩 변환하기 (iconv 함수) (0) 2017.12.23 [PHP] 랜덤 숫자 생성 (rand 함수) (0) 2017.12.20 [PHP] 문자열 길이 가져오기 (strlen, mb_strlen 함수) (0) 2017.12.15 [PHP] 날짜 더하기, 빼기 (date/strtotime 함수 활용) (0) 2017.12.14 [PHP] 시간 텍스트를 timestamp로 가져오기 (strtotime 함수) (0) 2017.12.14