반응형
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 사용 (글자 단위)
불변원본은 안 바뀜 — 새 문자열 반환
활용미리보기, 확장자, 시작·끝 부분 검사
반응형
'php' 카테고리의 다른 글
| PHP str_replace — 문자열 찾아 바꾸기 완전 정리 (0) | 2026.06.15 |
|---|---|
| PHP trim — 문자열 양끝 공백 제거 완전 정리 (0) | 2026.06.15 |
| PHP list() 재확인 — 배열을 변수로 분해 완전 정리 (0) | 2026.06.15 |
| PHP array_reverse — 배열 순서 뒤집기 완전 정리 (0) | 2026.06.15 |
| PHP array_merge — 두 배열 병합 + 중복 키 덮어쓰기 완전 정리 (0) | 2026.06.15 |
왕진 블로그

댓글