ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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_substrphp.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 : 세상

    댓글

Designed by Tistory.