Tips in Action‎ > ‎정규식‎ > ‎

한글 깨끗하게 자르기

전종필

어떤 데이터를 받거나 얻은 후, 데이터베이스에 넣거나 웹상에 표출할 때, 그 것이 너무 길어서 데이터베이스에서 받아들이지 않거나, 웹 페이지의 모양이 이상한 경우가 있습니다.
이 때는 받은 데이터의 일부를 불가피하게 잘라내야 하는 데, 영문이라면 큰 문제가 없지만 한글의 경우에는 문제가 됩니다.
이유는, 한글 한 글자를 나타내는 데 2바이트를 사용하기 때문입니다.
예를 들어 "우리나라 만세"를 10 바이트로 잘라내려면 "우리나라" 8바이트, 공백 1바이트, '만'자의 앞부분 1바이트가 남아서 출력될 때는 깨진 글자가 보여지게 됩니다.

이 때는 다음과 같은 코드를 사용하시면 됩니다.

if( length($text) > 60 ) {
	$text = substr($text,0,60);
	$text =~ s/(([\x80-\xff].)*)[\x80-\xff]?$/$1/;
}
일단 문자열을 원하는 길이만큼만 남기고 잘라냅니다(substr).
남은 문자열의 끝부분에 대해서 정규식을 적용하는데, 한글의 첫 바이트는 항상 \x7f 보다 크므로 [\x80-\xff]., 즉 한글의 첫바이트일 수 있는 [\x80-\xff] 한 바이트와 '.' 한 바이트가 합쳐진 것을 '*' 하면 한글 0 또는 그 이상의 글자가 됩니다. 그리고 한글의 첫바이트인 [\x80-\xff] 하나만 남는다면 온전한 한글 문자열부분인 (([\x80-\xff].)*) 부분이 $1 이라는 변수에 남아있으므로 그것을 일치된 전체 텍스트에 대해서 치환합니다.

한글이 다루기 까다롭다고 해서 한글을 쓰지 않을 수는 없겠지요? 자랑스러운 한글, 열심히 써서 빛냅시다요!!

Comments