IT_Programming/PHP

[PHP] 정규표현식으로 깨진 문자 없애기

JJun ™ 2015. 1. 7. 13:34



 출처: http://www.aierse.net/neko/nekoTop.php?mode=content&menu=category&main_no=314&category=computer



substr()등을 이용했을 시 한글이 깨지게 되는데, 

이 때 정규표현식 ^([\x00-\x7e]|.{2})* 를 보자.


^ : ^뒤의 문자열로 시작되는 것

() : 그룹화

[] : 안에 있는 문자열 중에서 하나의 문자

\x00-\x7e : ACSII 코드값의 0-126번째 문자(DEL제외 아스키문자 전부)

| : OR 연산자

. : 임의의 문자

{} : 앞에 있는 문자나 문자열의 갯수

* : 앞의 문자가 없거나 하나 이상


해석해보면 

"ACSII 코드값의 0-126번째 문자 이거나 2바이트 길이 임의의 문자로 시작되는 문자가 없거나 하나 이상인 것" 을 의미하기 때문에(정리하면 DEL을 제외한 아스키문자나 2바이트문자-한글-)


preg_match('/^([\x00-\x7e]|.{2})*/', $substr, $temp_str);


이렇게 되면 정규표현식으로 만든 패턴과 부합하는 $substr의 모든 문자를 $temp_str[0]에 저장하므로 깨진 문자 부분만 빠지게 됨.