💻 자주 쓰는 PHP 함수

[PHP 함수] sprintf() 함수 완벽 가이드

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

PHP에서 문자열을 포맷팅할 때 가장 강력한 함수 중 하나가 sprintf()입니다.
특히, 숫자 형식 지정, 동적 문자열 조합, 정렬, 소수점 자리 맞추기, 날짜 형식 변환 등에 매우 유용합니다.

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


1. sprintf() 함수란?

기본 문법

string sprintf(string $format, mixed ...$values)

매개변수 설명

매개변수 설명

$format 출력할 문자열 형식 (서식 지정자 포함)
$values 포맷 문자열에 삽입할 값들

반환값

  • 지정한 형식에 맞춰 문자열을 반환
  • 실제 문자열을 변경하지 않고 새로운 문자열을 반환

2. sprintf() 기본 예제

🔹 간단한 문자열 포맷팅

<?php
$name = "홍길동";
$age = 30;
$formatted = sprintf("이름: %s, 나이: %d", $name, $age);
echo $formatted;
?>

🔹 실행 결과

이름: 홍길동, 나이: 30

➡ %s는 문자열(String), %d는 정수(Integer)를 의미합니다.


3. sprintf()에서 사용 가능한 서식 지정자

sprintf()는 서식 지정자(Format Specifier)를 사용하여 다양한 데이터 타입을 포맷할 수 있습니다.

기본 서식 지정자

지정자 설명 예제

%s 문자열 (String) sprintf("Hello, %s", "World") → "Hello, World"
%d 정수 (Decimal) sprintf("%d", 42) → "42"
%f 실수 (Float) sprintf("%.2f", 3.141592) → "3.14"
%x 16진수 (Hexadecimal) sprintf("%x", 255) → "ff"
%o 8진수 (Octal) sprintf("%o", 255) → "377"
%b 2진수 (Binary) sprintf("%b", 10) → "1010"

4. sprintf()의 실용적인 활용 예제

🔹 1) 숫자 형식 맞추기 (자릿수 채우기)

<?php
echo sprintf("%04d", 25); // "0025"
?>

➡ %04d는 정수를 최소 4자리로 출력하며, 부족한 자리에는 0을 채웁니다.


🔹 2) 소수점 자리 맞추기

<?php
echo sprintf("%.3f", 3.141592); // "3.142"
?>

➡ %.3f는 소수점 이하 3자리까지 출력하며, 반올림됩니다.


🔹 3) 16진수 변환

<?php
echo sprintf("%X", 255); // "FF"
?>

➡ %X는 정수를 대문자 16진수로 변환합니다.


🔹 4) 날짜 형식 변환

<?php
$year = 2024;
$month = 3;
$day = 15;
echo sprintf("%04d-%02d-%02d", $year, $month, $day);
?>

🔹 실행 결과

2024-03-15

➡ %02d는 두 자리 숫자로 변환하며, 한 자리 숫자인 경우 앞에 0을 붙입니다.


🔹 5) 화폐 단위 및 통화 포맷

<?php
$price = 2500;
echo sprintf("₩%,d", $price); // "₩2,500"
?>

➡ %,d는 천 단위마다 쉼표(,)를 자동으로 추가합니다.


🔹 6) HTML 테이블 정렬된 출력

<?php
echo sprintf("<tr><td>%10s</td><td>%5d</td></tr>", "홍길동", 30);
?>

➡ %10s는 10칸 확보 후 오른쪽 정렬, %5d는 5칸 확보 후 오른쪽 정렬됩니다.


5. sprintf()와 다른 문자열 포맷 함수 비교

함수 설명

sprintf() 포맷을 지정하여 문자열을 반환
printf() 포맷을 지정하여 즉시 출력 (sprintf()와 동일한 기능)
number_format() 숫자를 쉼표(,)로 포맷
vsprintf() sprintf()와 동일하지만, 배열을 인자로 받음

✅ printf() vs sprintf() 비교

<?php
printf("이름: %s, 나이: %d", "홍길동", 30);
?>

➡ printf()는 즉시 출력하는 반면,
➡ sprintf()는 반환값을 저장할 수 있음.


6. sprintf() 사용 시 주의할 점

데이터 타입을 맞춰야 함

<?php
echo sprintf("%d", "abc"); // 오류 발생 가능 (경고 출력)
?>

➡ %d는 정수이므로, 문자열을 넣으면 예상치 못한 결과가 발생할 수 있습니다.

%s를 사용할 때 HTML 엔티티 변환 필요

<?php
echo sprintf("<p>%s</p>", "<script>alert('XSS');</script>");
// 보안 강화:
echo sprintf("<p>%s</p>", htmlspecialchars("<script>alert('XSS');</script>", ENT_QUOTES, "UTF-8"));
?>

➡ HTML 태그가 포함된 문자열을 출력할 때는 htmlspecialchars()를 함께 사용해야 보안이 강화됨.

소수점 자리수 주의 (%.2f)

<?php
echo sprintf("%.2f", 2.5); // "2.50"
?>

➡ %f는 자동으로 반올림되므로 정밀도가 필요한 경우 주의해야 합니다.

천 단위 쉼표를 자동으로 넣으려면 %,d 사용

<?php
echo sprintf("%,d", 1000000); // "1,000,000"
?>

➡ 큰 숫자를 출력할 때 가독성을 높이려면 쉼표 옵션을 활용하세요.


7. sprintf() 활용 팁

배열을 인자로 전달할 경우 vsprintf() 사용

<?php
$data = ["홍길동", 30];
echo vsprintf("이름: %s, 나이: %d", $data);
?>

문자열 길이 제한

<?php
echo sprintf("%.10s", "Hello, PHP World!"); // "Hello, PHP"
?>

➡ %.10s는 문자열을 10글자로 제한합니다.

배열과 결합하여 JSON 데이터 생성

<?php
$name = "홍길동";
$age = 30;
echo sprintf('{"name": "%s", "age": %d}', $name, $age);
?>

➡ sprintf()를 사용하면 JSON 데이터도 손쉽게 생성할 수 있습니다.


8. 결론

PHP의 sprintf() 함수는 숫자, 문자열, 날짜, 화폐 단위 등을 정밀하게 포맷하는 강력한 함수입니다.
이를 활용하면 정확한 형식의 출력, 가독성 높은 데이터 표시, HTML 테이블 정렬, JSON 데이터 생성 등을 쉽게 구현할 수 있습니다.

📌 핵심 요약
✔️ sprintf()는 문자열을 포맷하여 반환
✔️ %d, %s, %f, %x 등 다양한 서식 지정자 제공
✔️ 천 단위 쉼표 %,d, 소수점 자리 %.2f 등 활용 가능
✔️ HTML 출력 시 htmlspecialchars() 사용 권장

 

728x90