본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
php

PHP substr — 문자열 일부 자르기 완전 정리

by 왕진 2026. 6. 15.
반응형

 

 

Web Development · PHP substr

PHP substr —
문자열의 일부 잘라 가져오기

"ABCDEFGHIJKLMN"에서 4번째부터 5글자 → "DEFGH"
시작 오늘 분석할 코드
<?php $string = "ABCDEFGHIJKLMN"; $result = substr($string, 3, 5); // 0번부터 시작 → 3번 인덱스(D)부터 5글자 print $result; ?>
DEFGH
※ 원본 메모의 "3번째부터 1~5번째"는 혼동을 부르는 설명이다. 정확히는 인덱스 3(0부터 셈)에서 시작해서 5글자를 가져온다 → "D" 위치부터 "DEFGH".
용어 용어 정리
substr()substring — 문자열 일부 추출
매개변수 1원본 문자열
매개변수 2시작 인덱스 (0부터)
매개변수 3길이 (생략 시 끝까지)
음수 시작뒤에서부터 — -1은 마지막 글자
바이트 단위한글에 위험 — mb_substr 사용
반환값새 문자열 (원본 유지)
실무미리보기 텍스트, 코드 추출 등

1 인덱스는 0부터 — 인간 감각과 다름
A B C D E F G H I J K L M N 0 1 2 3 4 5 6 7 8 9 10 11 12 13 ← 인덱스 ↑ [3]번째 = "D"

substr($s, 3, 5) = "D부터 시작해서 5글자" = "DEFGH".


2 매개변수 변형
호출 결과 의미
substr($s, 3) "DEFGHIJKLMN" 3번부터 끝까지
substr($s, 3, 5) "DEFGH" 3번부터 5글자
substr($s, -3) "LMN" 뒤에서 3글자
substr($s, 0, -3) "ABCDEFGHIJK" 처음부터 끝 3글자 빼고
substr($s, -5, 3) "JKL" 뒤에서 5번째부터 3글자

3 한글에 substr을 쓰면? — 함정
$str = "안녕하세요"; substr($str, 0, 3); // "안" 한 글자 (UTF-8 한글 = 3바이트) mb_substr($str, 0, 3); // "안녕하" 세 글자 (글자 단위)
substr바이트 단위로 자른다. 한글 문자열은 글자 중간이 잘려 깨질 수 있다. 한글 다룰 땐 항상 mb_substr을 사용.

 

반응형

 

4 활용 예
// 미리보기 (영문 100자) $preview = substr($content, 0, 100) . "..."; // 한글 미리보기 (50글자) $preview = mb_substr($content, 0, 50, "UTF-8") . "..."; // 파일 확장자 $ext = substr($filename, -3); // "txt" $ext = substr($filename, strrpos($filename, ".") + 1); // 시작 검사 (PHP 8.0 이전) if (substr($url, 0, 8) === "https://") { ... } // PHP 8.0+ 권장 if (str_starts_with($url, "https://")) { ... }

5 자주 하는 실수
실수 증상 해결
한글 substr 글자 깨짐 mb_substr
인덱스 1부터로 착각 한 글자 어긋남 0부터 세기 (문자열·배열 모두)
3번째 매개변수가 끝 위치인 줄 앎 의도와 다름 — 길이임 "인덱스 + 길이" 기억
substr 결과가 false 가능성 옛 PHP에서 가끔 PHP 8.0+ 항상 문자열 반환

핵심 한 줄 요약

substr()문자열 일부를 잘라 새 문자열로 반환
매개변수(원본, 시작 인덱스, 길이)
인덱스0부터 시작 — 음수는 끝에서부터
한글 위험바이트 단위 → 글자 깨짐 가능
한글 권장mb_substr 사용 (글자 단위)
불변원본은 안 바뀜 — 새 문자열 반환
활용미리보기, 확장자, 시작·끝 부분 검사
반응형

댓글