字符串格式化 #
一、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, '', '&');
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