PHP로 작업하다 보면 한글과 영어가 혼합된 문자열의 길이를 제한해야 할 때가 있습니다. 특히 사용자 인터페이스나 데이터베이스에 저장될 문자열의 길이를 조정할 때는 한글도 정확히 한 글자로 계산해야 하는 경우가 많습니다. 이번 포스트에서는 한글 문자열을 포함한 텍스트의 길이를 제한하고, 초과 시 '...'을 붙이는 함수를 구현하는 방법을 알아보겠습니다.
PHP 문자열 함수의 한계
PHP에서 문자열의 길이를 계산할 때 흔히 사용하는 strlen 함수는 한글을 정확히 계산하지 못합니다. 영어 알파벳은 한 글자에 1바이트를 차지하지만, 한글은 멀티바이트 문자로 처리되어 2~3바이트로 계산됩니다. 따라서 strlen을 그대로 사용하면 한글 문자열의 실제 글자 수와 일치하지 않는 결과를 얻게 됩니다.
이 문제를 해결하려면 멀티바이트 문자열을 지원하는 mb_strlen과 mb_substr 같은 함수를 사용해야 합니다. 이 함수들은 UTF-8 인코딩을 기반으로 한글도 정확히 하나의 문자로 처리합니다.
한글 문자열 자르기 함수 구현
아래는 한글과 영어를 포함한 문자열의 길이를 제한하고, 초과 시 '...'을 붙이는 PHP 함수를 구현한 코드입니다:
function omitString($source, $limit) {
// mb_substr을 사용하여 멀티바이트 문자열을 처리
// mb_strlen으로 문자열의 길이 계산
if (mb_strlen($source, 'UTF-8') > $limit) {
return mb_substr($source, 0, $limit, 'UTF-8') . '...';
}
return $source;
}
// 테스트 예제
$text = 'asdkfljasjdfaskdjfaskjdfkjlsa한글입니다. 안녕하세요.ㅇㅁㅇ라만ㅇ럼ㅇㄹ';
$result = omitString($text, 20);
echo $result; // 20글자로 제한된 문자열 출력
함수 설명
- mb_strlen: 이 함수는 문자열의 길이를 UTF-8 기준으로 계산합니다. 한글도 정확히 하나의 문자로 간주하므로, 문자열의 실제 글자 수를 올바르게 측정할 수 있습니다.
- mb_substr: 문자열의 일부를 추출할 때 사용됩니다. 시작 위치와 길이를 지정하여 원하는 부분만 자를 수 있습니다. 이때도 UTF-8 인코딩을 지원하여 한글을 정확히 처리합니다.
- 조건문: 문자열의 길이가 지정한 제한 길이 $limit를 초과할 경우, 해당 길이만큼 잘라내고 '...'을 추가로 붙입니다. 초과하지 않으면 원래 문자열을 그대로 반환합니다.
사용 예제
위 코드에서 테스트 문자열 $text는 한글과 영어가 섞여 있습니다. 이 문자열을 20자로 제한하고, 결과를 출력하면 다음과 같은 결과를 얻을 수 있습니다:
asdkfljasjdfaskdjfa...
이처럼 한글도 정확히 하나의 글자로 계산되며, 20자를 초과한 경우에는 '...'이 추가됩니다. 이 방법을 활용하면 사용자 인터페이스에서 문자열 길이를 효과적으로 제한할 수 있습니다.
실용적인 활용 사례
- 웹사이트 제목 또는 설명 표시: 블로그나 전자상거래 사이트에서는 긴 제목이나 설명을 제한된 공간에 표시해야 할 때가 많습니다. 이 함수를 활용하면 한글과 영어가 혼합된 텍스트를 깔끔하게 자를 수 있습니다.
- 데이터베이스 저장: 데이터베이스에서 특정 칼럼의 길이를 제한해야 할 때, 초과 데이터를 자르고 저장할 수 있습니다. 이는 데이터 무결성을 유지하는 데 유용합니다.
- 모바일 UI 최적화: 모바일 환경에서는 화면 크기가 제한적이기 때문에, 긴 문자열을 잘라내고 '...'을 표시하는 것이 가독성을 높이는 데 효과적입니다.
코드 확장 가능성
이 함수를 확장하여 특정 문자열을 제외하거나, HTML 태그를 포함한 문자열을 처리하도록 만들 수도 있습니다. 예를 들어, 다음과 같이 태그를 무시하고 텍스트만 잘라내는 방법을 추가로 구현할 수 있습니다:
function omitStringWithoutTags($source, $limit) {
$plainText = strip_tags($source); // HTML 태그 제거
if (mb_strlen($plainText, 'UTF-8') > $limit) {
return mb_substr($plainText, 0, $limit, 'UTF-8') . '...';
}
return $plainText;
}
이처럼 다양한 상황에 맞게 함수를 커스터마이징하여 사용할 수 있습니다.
PHP에서 한글 문자열을 포함한 텍스트의 길이를 제한하고, 사용자 경험을 개선할 수 있는 방법을 잘 활용해 보세요. 이러한 작은 개선들이 사용자 인터페이스의 완성도를 크게 높일 수 있습니다.