PHP 入门教程
PHP 字符串
本教程共 65 篇 · 第 9 篇 · 更新于 2026-07-24 · 约 5 分钟阅读
PHPPHP8字符串字符串函数字符串拼接文本处理
9. PHP 字符串
本节目标:掌握字符串的创建、拼接和常用函数。学完你能灵活处理和操作文本数据。
9.1 创建字符串的三种方式
<?php
// 单引号:不解析变量,转义字符(除 \' 和 \\ 外)无效
$name = 'PHP';
$str1 = '学习 $name'; // 原样输出 $name
$str2 = '路径: C:\\windows\\'; // 正确输出反斜杠
// 双引号:解析变量,支持转义字符
$version = 8.5;
$str3 = "PHP $version 真棒"; // PHP 8.5 真棒
$str4 = "第一行\n第二行"; // 换行
// Heredoc 语法:适合大段文本,效果同双引号
$text = <<<EOD
你好,$name!
当前版本是 $version
EOD;
?>
Nowdoc 语法(PHP 5.3+):效果同单引号,不解析变量:
<?php
$name = "PHP";
$text = <<<'EOD'
这段文本不解析变量:$name
单引号不需要转义:it's easy
EOD;
?>
Tip不需要变量替换时用单引号,性能稍好。大段文本用 Heredoc/Nowdoc,可读性更强。
9.2 字符串拼接
PHP 使用点号 . 连接字符串:
<?php
$first = "Hello";
$second = "World";
// 用点号拼接
$greeting = $first . " " . $second; // Hello World
// 复合赋值
$first .= "!"; // 相当于 $first = $first . "!"
// 双引号内直接嵌入变量
$name = "张三";
echo "你好,$name!"; // 你好,张三!
echo "你好,{$name}!"; // 用大括号明确边界
// PHP 8.2+ 字符串插值改进
$arr = ["name" => "李四"];
echo "你好,{$arr['name']}"; // 你好,李四
?>
9.3 获取字符串长度
<?php
$str = "Hello World";
echo strlen($str); // 11(字节数)
// 中文字符串用 mb_strlen()
$chinese = "你好世界";
echo strlen($chinese); // 12(UTF-8 每个中文占 3 字节)
echo mb_strlen($chinese); // 4(字符数)
?>
Note
strlen()返回字节数,不是字符数。处理中文等多字节字符时,必须使用mb_strlen()。
9.4 字符串截取
<?php
$str = "Hello World";
// substr(字符串, 起始位置, 长度)
echo substr($str, 0, 5); // Hello
echo substr($str, 6); // World(从第 6 位到末尾)
echo substr($str, -5); // World(负数从末尾数)
echo substr($str, -5, 3); // Wor
// 中文字符串用 mb_substr()
$chinese = "你好,世界!";
echo mb_substr($chinese, 0, 2); // 你好
echo mb_substr($chinese, 3, 2); // 世界
?>
9.5 查找和替换
<?php
$str = "I love PHP, PHP is great!";
// 查找位置(首次出现)
$pos = strpos($str, "PHP"); // 7
// 查找位置(最后一次出现)
$lastPos = strrpos($str, "PHP"); // 12
// 不存在时返回 false
$notFound = strpos($str, "Java"); // false
// 替换(全部替换)
$newStr = str_replace("PHP", "JavaScript", $str);
echo $newStr; // I love JavaScript, JavaScript is great!
// 替换(只替换一次)
$newStr2 = str_replace("PHP", "JS", $str, $count);
echo "替换了 $count 次"; // 替换了 2 次
// 区分大小写的查找
$pos2 = stripos($str, "php"); // 7(不区分大小写)
?>
Tip
strpos()返回0表示在开头找到,false表示没找到。必须用===区分:if (strpos($str, "H") === false) { // 正确 echo "没找到"; } if (!strpos($str, "H")) { // 错误!0 会被视为 false echo "这会在开头找到时也执行"; }
9.6 字符串分割与连接
<?php
// explode() 分割字符串
$fruits = "apple,banana,orange";
$arr = explode(",", $fruits);
print_r($arr); // ["apple", "banana", "orange"]
// implode() / join() 连接数组
$words = ["Hello", "World"];
$sentence = implode(" ", $words); // Hello World
// str_split() 按字符拆分
$chars = str_split("abc"); // ["a", "b", "c"]
?>
9.7 大小写转换
<?php
$str = "Hello World";
echo strtolower($str); // hello world
echo strtoupper($str); // HELLO WORLD
echo ucfirst("hello"); // Hello(首字母大写)
echo ucwords("hello world"); // Hello World(每个单词首字母大写)
// PHP 8.0+ mb_convert_case() 支持多字节
$chinese = "hello 世界";
echo mb_convert_case($chinese, MB_CASE_TITLE); // Hello 世界
?>
9.8 去除空白字符
<?php
$str = " hello world \n";
echo trim($str); // "hello world"(两端去空白)
echo ltrim($str); // "hello world \n"(左边去空白)
echo rtrim($str); // " hello world"(右边去空白)
// 去除指定字符
echo trim("##hello##", "#"); // hello
?>
9.9 格式化字符串
<?php
// sprintf() 格式化
$num = 3.14159;
$str = sprintf("圆周率: %.2f", $num);
echo $str; // 圆周率: 3.14
// 多个占位符
$name = "张三";
$age = 25;
$info = sprintf("姓名: %s, 年龄: %d", $name, $age);
echo $info; // 姓名: 张三, 年龄: 25
// printf() 直接输出
printf("价格: %.2f 元", 19.99); // 价格: 19.99 元
?>
常用格式化占位符:
| 占位符 | 说明 | 示例 |
|---|---|---|
%s | 字符串 | sprintf("%s", "hello") |
%d | 整数 | sprintf("%d", 42) |
%f | 浮点数 | sprintf("%.2f", 3.14) |
%b | 二进制 | sprintf("%b", 5) → 101 |
%x | 十六进制 | sprintf("%x", 255) → ff |
来源:参考了 w3cschool「PHP 字符串变量」、runoob「PHP 字符串」以及 php.net 官方文档,综合改写后所得。