그누보드 문자열 글자 자르기 cutstr 함수 사용법과 버전별 적용 방법
페이지 정보

본문
그누보드 게시판 목록이나 여분 필드에서 긴 문자열을 지정한 길이만큼 자르고 말줄임표나 특정 문자를 표시하고 싶은 운영자·개발자를 위해, lib/common.lib.php에 정의된 cutstr 함수와 convsubject 함수의 구체적인 사용법과 버전에 따른 차이를 안내합니다.
그누보드 문자열 자르기 및 말줄임표 설정 방법
그누보드에서는 긴 문자열을 지정한 길이만큼 자르고 말줄임표나 특정 문자를 표시하기 위해 lib/common.lib.php 파일에 정의된 cut_str 함수와 conv_subject 함수를 제공합니다.
1. cut_str 함수 사용법
cut_str 함수는 첫 번째 인자에 자를 문자열 변수나 데이터, 두 번째 인자에 글자 수, 세 번째 인자에 대체 문자열(말줄임표 등)을 전달하여 사용합니다.
- 기본 구조:
cut_str($str, $len, $suffix)$str: 자르고 싶은 대상 문자열(변수)$len: 자를 글자 수 (띄어쓰기 포함)$suffix: 지정한 글자 수를 초과할 경우 표시할 문자 (기본값은…)
wr_1 출력 시)
- 4글자만 자르고 기본 말줄임표(
…) 출력<?php echo cut_str($list[$i]['wr_1'], 4);?> - 4글자만 자르고 별도 문자(``) 출력*
<?php echo cut_str($list[$i]['wr_1'], 4, '***');?> - 4글자만 자르고 나머지 부분 생략(공백 처리)
<?php echo cut_str($list[$i]['wr_1'], 4, '');?>
2. conv_subject 함수 활용
제목 등의 텍스트 변환 시 conv_subject 함수를 함께 사용할 수 있으며, 내부적으로 cut_str 기능을 포함하고 있습니다.
- 사용 예시
<?php echo conv_subject($list[$i]['wr_subject'], 글자수, "...");?> <?php echo conv_subject($wr_subject, 글자수, "...");?>
cut_str 함수 인자 설정 방법
그누보드의 cut_str 함수는 문자열을 지정한 길이만큼 자르고 말줄임표나 대체 문자열을 표시할 때 사용합니다. 함수 구조는 cut_str($str, $len, $suffix="…") 형태입니다.
인자 설명
- 첫 번째 인자 (
$str): 자르고 싶은 대상 문자열이나 변수를 입력합니다. - 두 번째 인자 (
$len): 자를 글자 수를 숫자로 지정합니다. (띄어쓰기 포함) - 세 번째 인자 (
$suffix): 잘린 나머지 글자 대신 표시할 대체 문자열을 지정합니다. 생략하면 기본값인 말줄임표(…)가 적용됩니다.
설정 예시
- 기본 말줄임표 출력:
<?php echo cut_str($변수, 4);?>- 4자로 자르고 나머지 부분은 기본값(
…)으로 출력합니다.
- 4자로 자르고 나머지 부분은 기본값(
- 별도 문자열 지정 출력:
<?php echo cut_str($변수, 4, '***');?>- 4자로 자르고 나머지는 지정한 별표(
***)로 출력합니다.
- 4자로 자르고 나머지는 지정한 별표(
- 대체 문자 없이 생략:
<?php echo cut_str($변수, 4, '');?>- 4자로 자르고 나머지 부분은 공백으로 처리하여 생략합니다.
그누보드4와 그누보드5의 cut_str 함수 차이 및 바이트 처리 방식
그누보드4와 그누보드5의 lib/common.lib.php에 정의된 cut_str 함수는 문자열을 지정된 길이만큼 자르고 말줄임표나 대체 문자를 붙여주는 사용자 정의 함수입니다. 두 버전은 내부 문자셋 처리 방식과 코드 구현에서 차이가 있습니다.
1. 그누보드4의 cut_str 함수 바이트 처리 방식
- 파일 위치 및 기준: 그누보드4 (
lib/common.lib.php의 대략 1357 ~ 1371 줄, 그누보드 4.37.38 기준) - 동작 방식: 사이트 인코딩 설정(
$g4['charset'])에 따라 다르게 분기합니다.- UTF-8 환경: 유니코드 바이트 구조를 직접 판별하여 글자를 자릅니다.
strtoupper($g4['charset']) == 'UTF-8'조건 하에 비트 연산을 통해 한글(유니코드 3바이트 등)과 영문·숫자·공란·특수문자(길이 1)의 바이트 경계를 맞추어 잘라냅니다. - EUC-KR 환경: 문자열을
$len만큼 자른 후, 잘린 문자열 내에 포함된 127보다 큰 바이트(ord($s[$i]) > 127)의 개수를 세어 홀수 개가 될 경우 글자가 깨지지 않도록 바이트 조정을 거칩니다.
- UTF-8 환경: 유니코드 바이트 구조를 직접 판별하여 글자를 자릅니다.
2. 그누보드5의 cut_str 함수 바이트 처리 방식
- 파일 위치 및 기준: 그누보드5 (
lib/common.lib.php의 대략 1380 ~ 1394 줄, 그누보드 5.3.1.4 기준) - 동작 방식: 정규식과 배열 함수를 활용하여 글자 수 단위로 처리합니다.
preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);를 사용하여 유니코드 문자 단위로 배열에 나눕니다.- 글자 수(
$len)와 배열의 전체 길이($str_len)를 비교하여 지정된 글자 수 이상일 경우array_slice로 잘라낸 뒤$suffix를 붙입니다. - 바이트 기반의 비트 연산 대신 PHP의 유니코드 정규식(
//u)을 활용해 글자 수 기준으로 안전하게 처리합니다.
HTML 태그 포함 문자열 처리 시 주의사항
그누보드의 cut_str 함수는 문자열의 길이를 기준으로 자르는 함수입니다. 만약 HTML 태그가 포함된 문자열에 cut_str을 직접 적용하면, 태그의 일부가 잘리면서 레이아웃이 깨지거나 의도치 않은 디자인 오류가 발생할 수 있습니다. 이를 방지하기 위해 다음 방법을 권장합니다.
1. strip_tags() 함수 사용
문자열을 자르기 전에 strip_tags() 함수를 사용하여 HTML 태그를 먼저 제거하면 태그가 잘리는 문제를 방지할 수 있습니다.
- 예시:
<?php echo cut_str(strip_tags($view['wr_subject']), 50);?>
2. get_text() 함수 활용
그누보드에서 제공하는 get_text() 함수를 함께 사용하면 HTML 특수문자 처리 및 텍스트 변환을 거친 후 안전하게 자를 수 있습니다.
- 예시:
<?php echo cut_str(get_text($view['wr_subject']), 70);?>
3. 스킨 파일 적용 시 참고
view.skin.php와 같은 스킨 파일에서 제목이나 본문을 출력할 때, 태그가 포함된 변수를 그대로 자르지 않도록 주의해야 합니다. 위와 같이 태그를 제거하거나 텍스트화하는 과정을 거친 뒤 cut_str을 적용하는 것이 안정적입니다.
상황별 판단 및 행동 가이드
| 내 상황 | 우선할 판단 | 다음 행동 |
|---|---|---|
게시판 목록이나 여분필드(wr_1) 등에서 긴 문자열을 지정된 글자 수로 줄이고 싶음 | lib/common.lib.php에 정의된 사용자 정의 함수 cut_str 활용 가능 여부 확인 | <?php echo cut_str($변수, 글자수, '말줄임문자');?> 코드를 스킨 파일에 적용 |
| HTML 태그가 포함된 제목이나 본문 텍스트를 자를 때 레이아웃 깨짐 방지가 필요함 | 태그 일부가 잘려 디자인 오류가 발생하는지 점검 | cut_str 적용 전 strip_tags() 또는 get_text() 함수를 함께 조합하여 처리 |
실전 FAQ
Q. 띄어쓰기나 특수문자도 글자 수에 포함되나요?
- 예외 및 대안: 네,
cut_str함수는 띄어쓰기를 포함하여 글자 수를 계산합니다. 공백, 영숫자, 특수문자는 길이 1로 취급되며, 한글의 경우 그누보드 버전 및 문자셋(UTF-8/EUC-KR)에 따라 바이트 및 유니코드 단위 처리 방식에 차이가 있을 수 있으므로 실제 출력 결과를 확인해야 합니다.
Q. cut_str 함수 사용 시 페이지가 멈추거나 에러가 발생하면 어떻게 하나요?
- 예외 및 대안:
cut_str과conv_subject는 그누보드 내부 파일(lib/common.lib.php)에 정의된 사용자 정의 함수입니다. 그누보드 환경이 아닌 외부 페이지나 함수 파일이 누락된 곳에서 호출하면 오류가 발생할 수 있으므로, 해당 라이브러리 파일이 정상적으로include되었는지 확인해야 합니다.
함께 보면 좋은 글
참고자료
기타 참고자료
- 이전글그누보드 로그인 및 로그아웃 후 특정 페이지 리다이렉트 설정 방법 26.09.29
- 다음글그누보드 썸네일 여백 제거 및 크롭 방식(기준점) 설정 가이드 26.09.29
댓글목록
등록된 댓글이 없습니다.