[PHP] preg_replace로 특수문자 제거 후 한글 깨질 때 해결법
개발 중인 게시판에서 검색 시 검색어의 한글이 깨진다는 보고가 있어 살펴보니 검색어에서 특수문자를 제거하는 코드에서 원인을 찾을 수가 있었다.
$stx = preg_replace('/[[:punct:]]/', '', $stx);
오류를 보고하신 분의 PHP 버전이 5.3.21이었는데 이 버전에서만 문제가 되는 것인지는 확실치가 않다. 위 코드를 적용했을 때 한글이 깨진다면 아래처럼 코드를 수정하면 된다.
$stx = preg_replace('/[[:punct:]]/u', '', $stx);
코드를 보면 preg_replace 패턴에 u 가 추가된 것을 볼 수 있다. u 추가되면 unicode safe 라고 검색하다 보니 나와서 혹시나 싶어 추가해봤는데 더 이상 한글이 깨지지 않았다.