字符串格式化 #

一、printf系列函数 #

1.1 printf() - 格式化输出 #

php
<?php
printf("Hello, %s!\n", "World");
printf("Number: %d\n", 42);
printf("Price: %.2f\n", 99.99);

1.2 sprintf() - 返回格式化字符串 #

php
<?php
$message = sprintf("Hello, %s!", "World");
echo $message;

$url = sprintf("https://%s/%s", "example.com", "page");
echo $url;

1.3 fprintf() - 输出到文件 #

php
<?php
$fp = fopen('output.txt', 'w');
fprintf($fp, "Name: %s, Age: %d\n", "John", 25);
fclose($fp);

1.4 vprintf() / vsprintf() #

php
<?php
$args = ["World", 42];
vprintf("Hello, %s! Number: %d\n", $args);

$result = vsprintf("Hello, %s! Number: %d", $args);
echo $result;

二、格式说明符 #

2.1 常用说明符 #

说明符 说明
%s 字符串
%d 整数
%f 浮点数
%b 二进制
%o 八进制
%x 十六进制(小写)
%X 十六进制(大写)
%c ASCII字符
%e 科学计数法
%% 百分号

2.2 字符串格式化 #

php
<?php
printf("[%s]\n", "Hello");
printf("[%10s]\n", "Hello");
printf("[%-10s]\n", "Hello");
printf("[%'.10s]\n", "Hello");
printf("[%10.3s]\n", "Hello");

2.3 整数格式化 #

php
<?php
printf("%d\n", 42);
printf("%05d\n", 42);
printf("%+d\n", 42);
printf("%+d\n", -42);
printf("%b\n", 42);
printf("%o\n", 42);
printf("%x\n", 255);
printf("%X\n", 255);

2.4 浮点数格式化 #

php
<?php
printf("%.2f\n", 3.14159);
printf("%10.2f\n", 3.14159);
printf("%-10.2f\n", 3.14159);
printf("%010.2f\n", 3.14159);
printf("%e\n", 1234567.89);

2.5 参数交换 #

php
<?php
printf("%2\$s, %1\$s\n", "World", "Hello");

printf("The %s contains %d monkeys\n", "tree", 5);
printf("The %2\$s contains %1\$d monkeys\n", 5, "tree");

三、number_format() #

3.1 基本用法 #

php
<?php
echo number_format(1234567.89);
echo number_format(1234567.89, 2);
echo number_format(1234567.89, 2, '.', ',');
echo number_format(1234567.89, 2, ',', ' ');

3.2 格式化货币 #

php
<?php
function formatCurrency(float $amount, string $currency = 'CNY'): string
{
    $symbols = [
        'CNY' => '¥',
        'USD' => '$',
        'EUR' => '€'
    ];
    
    $symbol = $symbols[$currency] ?? '';
    return $symbol . number_format($amount, 2);
}

echo formatCurrency(1234567.89);
echo formatCurrency(1234567.89, 'USD');

四、日期时间格式化 #

4.1 date() #

php
<?php
echo date('Y-m-d');
echo date('Y-m-d H:i:s');
echo date('l, F j, Y');
echo date('Y年m月d日 H:i:s');

4.2 常用格式字符 #

字符 说明 示例
Y 4位年份 2024
m 2位月份 01-12
d 2位日期 01-31
H 24小时制 00-23
i 分钟 00-59
s 00-59
l 星期几 Monday
F 月份名 January

4.3 DateTime类 #

php
<?php
$date = new DateTime();
echo $date->format('Y-m-d H:i:s');

$date = new DateTime('2024-01-15');
echo $date->format('Y年m月d日');

$date->modify('+1 month');
echo $date->format('Y-m-d');

五、JSON格式化 #

5.1 json_encode() #

php
<?php
$data = [
    'name' => 'John',
    'age' => 25,
    'active' => true
];

echo json_encode($data);

echo json_encode($data, JSON_PRETTY_PRINT);

echo json_encode(['name' => '张三'], JSON_UNESCAPED_UNICODE);

echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

5.2 json_decode() #

php
<?php
$json = '{"name":"John","age":25}';

$obj = json_decode($json);
echo $obj->name;

$arr = json_decode($json, true);
echo $arr['name'];

六、URL格式化 #

6.1 urlencode() / urldecode() #

php
<?php
$url = "https://example.com/search?q=" . urlencode("PHP 教程");
echo $url;

$decoded = urldecode("PHP+%E6%95%99%E7%A8%8B");
echo $decoded;

6.2 http_build_query() #

php
<?php
$params = [
    'search' => 'PHP',
    'page' => 1,
    'sort' => 'date'
];

$query = http_build_query($params);
echo $query;

$query = http_build_query($params, '', '&amp;');
echo $query;

6.3 parse_url() #

php
<?php
$url = "https://example.com:8080/path?query=value#fragment";

$parts = parse_url($url);
print_r($parts);

6.4 parse_str() #

php
<?php
$query = "name=John&age=25";

parse_str($query, $params);
print_r($params);

七、Base64编码 #

7.1 base64_encode() / base64_decode() #

php
<?php
$encoded = base64_encode("Hello World");
echo $encoded;

$decoded = base64_decode($encoded);
echo $decoded;

7.2 URL安全的Base64 #

php
<?php
function base64UrlEncode(string $data): string
{
    return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}

function base64UrlDecode(string $data): string
{
    return base64_decode(strtr($data, '-_', '+/'));
}

八、HTML格式化 #

8.1 nl2br() #

php
<?php
$text = "Line1\nLine2\nLine3";

echo nl2br($text);

8.2 wordwrap() #

php
<?php
$text = "This is a very long sentence that needs to be wrapped.";

echo wordwrap($text, 20);
echo wordwrap($text, 20, "<br>\n");

九、实际应用 #

9.1 格式化文件大小 #

php
<?php
function formatFileSize(int $bytes): string
{
    $units = ['B', 'KB', 'MB', 'GB', 'TB'];
    $i = 0;
    
    while ($bytes >= 1024 && $i < count($units) - 1) {
        $bytes /= 1024;
        $i++;
    }
    
    return sprintf('%.2f %s', $bytes, $units[$i]);
}

echo formatFileSize(1024);
echo formatFileSize(1048576);
echo formatFileSize(1073741824);

9.2 格式化时间差 #

php
<?php
function formatTimeDiff(DateTime $date): string
{
    $now = new DateTime();
    $diff = $now->diff($date);
    
    if ($diff->y > 0) {
        return sprintf('%d 年前', $diff->y);
    } elseif ($diff->m > 0) {
        return sprintf('%d 个月前', $diff->m);
    } elseif ($diff->d > 0) {
        return sprintf('%d 天前', $diff->d);
    } elseif ($diff->h > 0) {
        return sprintf('%d 小时前', $diff->h);
    } elseif ($diff->i > 0) {
        return sprintf('%d 分钟前', $diff->i);
    } else {
        return '刚刚';
    }
}

9.3 生成订单号 #

php
<?php
function generateOrderId(string $prefix = ''): string
{
    return sprintf(
        '%s%s%04d',
        $prefix,
        date('YmdHis'),
        mt_rand(0, 9999)
    );
}

echo generateOrderId('ORD');

十、总结 #

本章学习了:

  • printf系列函数
  • 格式说明符
  • number_format()
  • 日期时间格式化
  • JSON格式化
  • URL格式化
  • Base64编码
  • HTML格式化

下一章将学习正则表达式。

最后更新:2026-03-26