| 佔位符 | 說明 | 範例輸出 |
%% | 百分號字面值 | % |
%b | 二進位 | 1010 |
%c | ASCII 字元 | A |
%d | 有號十進位整數 | 123 |
%e | 科學記號 (小寫 e) | 1.23e+2 |
%E | 科學記號 (大寫 E) | 1.23E+2 |
%u | 無號十進位整數 | 123 |
%f | 浮點數 (受 locale 影響) | 123.456000 |
%F | 浮點數 (不受 locale 影響) | 123.456000 |
%g | 自動選擇 %e 或 %f (短者) | 123.456 |
%G | 自動選擇 %E 或 %F | 123.456 |
%o | 八進位 | 173 |
%s | 字串 | hello |
%x | 十六進位 (小寫) | 7b |
%X | 十六進位 (大寫) | 7B |
進階功能:引數編號、寬度、精度、填補
<?php
$num = 123.456789;
// 1. 引數編號 %1$ 重複使用同一引數
echo sprintf('%1$d / %1$08b / %1$04x', 42); // "42 / 00101010 / 002a"
// 2. 寬度與靠左靠右 %[width] / %-[width]
echo sprintf("|%10s|", 'a'); // "| a|"
echo sprintf("|%-10s|", 'a'); // "|a |"
// 3. 精度 .N (浮點數小數位、字串截斷)
echo sprintf("%.2f", $num); // "123.46"
echo sprintf("%.5s", 'hello world'); // "hello"
// 4. 零填補 %0[width]d
echo sprintf("%05d", 7); // "00007"
// 5. 正負號強制顯示 %+d / % d
echo sprintf("%+d", 10); // "+10"
echo sprintf("% d", -10); // "-10" (正數前加空格)
// 6. 組合:%[arg$][flags][width][.precision]specifier
echo sprintf('%2$03d %1$05s', 'abc', 7); // "007 00abc"
?>
實用場景範例
組合 MIME 類型
$mime = sprintf('%s/%s', 'application', 'pdf'); // "application/pdf"
產生固定長度流水號
$sn = sprintf('ORD%08d', 123); // "ORD00000123"
SQL 參數化佔位符 (PDO 不需手動,但有時用於組合結構)
$sql = sprintf(
'SELECT * FROM %s WHERE %s = ? ORDER BY %s LIMIT ?,?',
'users', 'status', 'created_at'
);
格式化金額(含千分位、固定小數)
// number_format 更適合,但 sprintf 可組合
echo sprintf('NT$ %s', number_format(1234567.5, 2, '.', ',')); // "NT$ 1,234,567.50"
常見錯誤
- 佔位符數量不符:少於引數會警告,多於引數需用編號佔位符 `%1$s` 重複使用
- 型別不符:`%d` 接收字串會轉整數 (導致 0),建議先轉型
- 多位元組字串寬度:`%10s` 寬度按**位元組**計算,中文會對齊錯位,需用 `mb_strimwidth` 或自行處理
- 上一篇文章: PHP 檔案下載與線上預覽 PDF 實作範例
- 下一篇文章: PHP 輸入資料安全過濾函數(支援 GET/POST/COOKIE、魔術引號相容)
Copyright ©
程式碼之家 All Rights Reserved