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("자르려고 하는 문자열", 시작위치, 자를 위치, "언어셋");