WEB/PHP
[PHP] 문자열 자르기 한글깨짐 substr 말고 iconv_substr
Ezcode
2016. 11. 9. 10:38
보통 개발일을 하면서 문자열을 잘라야 할 경우 퍼블단에서 div로 overflow:hidden 을 사용하는게 대부분이다.
(필자는 그렇다.)
하지만 PHP에서 문자열을 잘라야 할때는 substr 함수를 사용하는데
캐릭터셋이 UTF-8이고 아이디나 닉네임 뒤에 몇자리를 가려야 할 상황에 substr을 사용하다보면
한글깨짐 현상이 있을수 있다.
예를 들어
$nickname = "이지코드이지코드";
echo substr($nickname, 0, 5);
// 이��
이렇게 출력된다.
이는 euc-kr에서는 한글을 2바이트로 처리 / utf-8에서는 3바이트로 처리한다고 한다.
하여 문자깨짐을 방지하려면 substr 말고 다른 함수를 써야 한다.
대체 함수로 mb_substr이 있는데 이 함수는 mb_string이 설치되어 있어야 사용가능하여
필자는 iconv가 사용가능해서
아래의 iconv_substr을 사용하여 처리했다.
iconv_substr($nickname, 0, 5, "utf-8");
이렇게 처리하면 한글 자르기 할때도 문자가 깨지거나 하는 일은 없다.
사용방법은
iconv_substr("자르려고 하는 문자열", 시작위치, 자를 위치, "언어셋");