[PHP] mb_substr 사용 시 문자가 null로 출력되는 경우

한글과 같은 2byte 문자를 자를 경우에는 substr이 아닌 mb_substr을 사용해야 합니다.

그런데 mb_substr 함수를 사용했을때 어떤 경우는 문자열이 잘리지 않고 null로 출력되는 경우가 있습니다.

이런 경우에는 mb_substr 함수의 인자를 확인해보세요.

마지막 인자에 인코딩 타입을 지정해주시면 해결이 됩니다. 너무 간단한 내용이지만 의외의 복병이 될 수도 있습니다.

이 함수 말고도 mb_strlen, mb_strcut 과 같은 함수도 공통으로 가지고 있는 사항이니 참고하세요.

[PHP] substr시 한글 글자수에 맞춰 자르기

영문과 한글은 1byte와 2byte로 byte 수가 다릅니다. 그리고 UTF-8 인코딩의 경우 3byte입니다.

이경우 단순히 substr를 사용한다면 1byte가 넘는 문자열은 깨지게 됩니다.

이런 문제를 바이트 체크하면서 문자열을 자르는 함수을 구현해 사용하는 경우가 간혹 있는데..

정신건강에 좋지 못합니다.

substr의 경우 mb_substr을 사용하면 간단하게 해결 됩니다. 다만 PHP 기본 함수는 아니고 mbstring 모듈을 추가해야 사용가능합니다. (요즘은 대부분 기본적으로 포함되어 있습니다.)

mbstring 모듈은 2byte 이상의 문자열에 대해 string 함수를 사용하기 위해 만들어졌습니다. 때문에 substr 말고도 그 밖에 많은 string 함수를 지원합니다.

더 자세한 내용은 php 공식 웹사이트에 정리되어 있으므로 굳이 여기에 모두 기재하지는 않겠습니다.