首页 / PHP 入门教程 / PHP 字符串

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 官方文档,综合改写后所得。