💻 자주 쓰는 PHP 함수

[PHP 함수] substr() 함수로 문자열 자르기

rhandy 2025. 3. 19. 18:10
728x90

PHP에서 문자열을 다룰 때 특정 부분만 잘라서 가져와야 하는 경우가 많습니다.
예를 들면, 문자열의 일부를 추출하여 미리보기 텍스트를 생성하거나, 사용자 입력을 일정 길이까지만 저장하는 기능이 필요할 수 있습니다.

이때 가장 유용한 함수가 바로 substr() 함수입니다.

이 글에서는 PHP substr() 함수의 사용법, 다양한 활용 예제, 유용한 팁과 주의사항을 체계적으로 정리하겠습니다. 


1. substr() 함수란?

기본 문법

string substr(string $string, int $start, ?int $length = null)

매개변수 설명

매개변수 설명

$string 잘라낼 대상 문자열
$start 시작 위치 (0부터 시작, 음수 사용 가능)
$length (선택) 가져올 문자열 길이 (생략하면 끝까지 가져옴)

반환값

  • $start 위치에서 $length 길이만큼 잘라낸 문자열을 반환
  • $length가 생략되면 $start부터 문자열 끝까지 반환
  • $start가 음수이면 뒤에서부터 시작
  • $length가 음수이면 뒤에서부터 해당 길이만큼 제외하고 반환

2. substr() 기본 예제

🔹 문자열의 일부를 가져오기

<?php
$text = "Hello, PHP World!";
echo substr($text, 7, 3);
?>

🔹 실행 결과

PHP

➡ 7번째 문자부터 3글자를 가져옵니다.


🔹 $length 없이 사용 (끝까지 추출)

<?php
echo substr($text, 7);
?>

🔹 실행 결과

PHP World!

➡ 7번째 문자부터 끝까지 출력됩니다.


🔹 $start 음수 사용 (뒤에서부터 시작)

<?php
echo substr($text, -6, 5);
?>

🔹 실행 결과

World

➡ 문자열의 끝에서 6번째 문자부터 5글자를 가져옵니다.


🔹 $length 음수 사용 (뒤에서 제외)

<?php
echo substr($text, 0, -7);
?>

🔹 실행 결과

Hello, PHP

➡ 문자열의 처음부터 끝에서 7글자를 제외한 부분을 출력합니다.


3. substr()의 실용적인 활용 예제

🔹 1) 긴 문자열을 일정 길이까지만 표시 (미리보기 텍스트)

<?php
$article = "이것은 PHP에서 substr() 함수를 활용하여 문자열을 다루는 예제입니다.";
$preview = substr($article, 0, 20) . "...";
echo $preview;
?>

🔹 실행 결과

이것은 PHP에서 substr()...

➡ 긴 텍스트를 일정 길이까지만 잘라서 미리보기 형식으로 출력할 수 있습니다.


🔹 2) 이메일 아이디 숨기기

<?php
$email = "user@example.com";
$masked = substr($email, 0, 2) . str_repeat("*", strlen($email) - 5) . substr($email, -3);
echo $masked;
?>

🔹 실행 결과

us**********com

➡ 이메일 주소 일부를 *로 변경하여 개인정보 보호할 수 있습니다.


🔹 3) 파일 확장자 추출

<?php
$filename = "document.pdf";
$extension = substr($filename, strrpos($filename, ".") + 1);
echo $extension;
?>

🔹 실행 결과

pdf

➡ strrpos()를 사용하여 마지막 .의 위치를 찾아 확장자를 추출할 수 있습니다.


🔹 4) URL에서 도메인 추출

https://www.example.com/page";
$domain = substr($url, strpos($url, "//") + 2, strpos($url, "/", 8) - strpos($url, "//") - 2);
echo $domain;
?>

🔹 실행 결과

www.example.com

➡ strpos()와 함께 사용하여 URL에서 도메인 부분만 추출할 수 있습니다.


🔹 5) 특정 구분자로 문자열 나누기

<?php
$string = "apple,banana,grape";
$firstWord = substr($string, 0, strpos($string, ","));
echo $firstWord;
?>

🔹 실행 결과

apple

첫 번째 쉼표 이전의 단어를 추출할 수 있습니다.


4. substr() 함수와 다른 문자열 함수 비교

함수 설명

substr() 문자열의 일부를 잘라서 반환
mb_substr() 다국어(멀티바이트) 문자열을 안전하게 잘라서 반환
strstr() 특정 문자열 이후의 모든 부분 반환
explode() 특정 구분자로 문자열을 나누어 배열로 반환

5. substr() 사용 시 주의할 점

한글 같은 멀티바이트 문자열 처리 (mb_substr() 사용) substr()은 UTF-8 인코딩의 한글을 처리할 때 문제가 발생할 수 있음.

<?php
$text = "안녕하세요, PHP!";
echo substr($text, 0, 4); // 잘못된 출력: "안녕하?"
?>

한글이 깨지는 경우 mb_substr()을 사용해야 함.

<?php
echo mb_substr($text, 0, 4, "UTF-8"); // "안녕하세요"
?>

음수 값을 사용할 때 주의

<?php
echo substr("abcdef", -10); // 전체 문자열보다 큰 음수는 전체 반환됨
?>

substr()은 원본 문자열을 변경하지 않음

<?php
$text = "Hello, World!";
$new_text = substr($text, 0, 5);
echo $text; // 여전히 "Hello, World!"
?>

➡ substr()은 원본 문자열을 변경하지 않고 새로운 문자열을 반환함.


6. substr() 활용 팁

URL 길이 제한 시 유용

$url = "https://example.com/very-long-url";
echo substr($url, 0, 30) . "..."; // 긴 URL을 줄여서 표시

데이터베이스에서 길이 제한이 있는 컬럼 저장 시

$name = "홍길동입니다.";
$shortName = substr($name, 0, 6);

비밀번호 마스킹

$password = "my_secure_password";
echo substr($password, 0, 3) . str_repeat("*", strlen($password) - 3);

7. 결론

PHP의 substr() 함수는 문자열에서 특정 부분을 추출하는 강력한 함수입니다.
이를 활용하면 미리보기 텍스트 생성, 데이터 보호, 파일 확장자 추출, URL 처리 등 다양한 작업을 수행할 수 있습니다.

📌 핵심 요약
✔️ substr()은 문자열에서 특정 부분을 추출
✔️ $start는 시작 위치, $length는 잘라낼 길이
✔️ $start와 $length에 음수를 사용하면 뒤에서부터 추출 가능
✔️ 한글 같은 다국어 문자열은 mb_substr()을 사용해야 함

이제 substr()을 활용하여 더욱 효율적인 PHP 개발을 해보세요! 🚀

💡 도움이 되셨다면 공유해주세요! 😊

728x90