字符串是PHP中最常用的数据类型之一,PHP提供了丰富的字符串处理函数。
<?php
// 单引号字符串(不解析变量)
$str1 = 'Hello World';
$name = 'PHP';
echo 'Hello $name'; // 输出: Hello $name
// 双引号字符串(解析变量)
$str2 = "Hello World";
echo "Hello $name"; // 输出: Hello PHP
echo "Hello {$name}"; // 使用花括号更清晰
// Heredoc语法(多行字符串,解析变量)
$html = <<<HTML
<div>
<h1>标题</h1>
<p>内容:$name</p>
</div>
HTML;
// Nowdoc语法(多行字符串,不解析变量)
$text = <<<'TEXT'
这是原始文本
$name 不会被解析
TEXT;
?>
<?php
$str = "Hello World";
echo strlen($str); // 11 - 字节长度
// 多字节字符串(中文等)
$chinese = "你好世界";
echo strlen($chinese); // 12 - 字节长度(UTF-8每个中文3字节)
echo mb_strlen($chinese); // 4 - 字符长度
// 设置多字节编码
mb_internal_encoding("UTF-8");
?>
<?php
$str = "Hello";
echo $str[0]; // H - 第一个字符
echo $str[4]; // o - 第五个字符
echo $str[-1]; // o - 最后一个字符(PHP 7.1+)
// 修改字符
$str[0] = 'h';
echo $str; // hello
?>
<?php
$text = "Hello World, Welcome to PHP World";
// strpos - 查找第一次出现的位置
$pos = strpos($text, "World"); // 6
$pos = strpos($text, "world"); // false(区分大小写)
// stripos - 不区分大小写查找
$pos = stripos($text, "world"); // 6
// strrpos - 查找最后一次出现的位置
$pos = strrpos($text, "World"); // 32
// 注意:位置0也是有效位置
if (strpos($text, "Hello") !== false) {
echo "找到了";
}
?>
<?php
$text = "Hello World";
// 检查是否包含
str_contains($text, "World"); // true
str_contains($text, "PHP"); // false
// 检查开头
str_starts_with($text, "Hello"); // true
str_starts_with($text, "World"); // false
// 检查结尾
str_ends_with($text, "World"); // true
str_ends_with($text, "Hello"); // false
?>
<?php
$str = "Hello World";
// str_replace - 替换所有匹配
$new = str_replace("World", "PHP", $str);
echo $new; // Hello PHP
// 替换多个
$text = "I like apples and oranges";
$new = str_replace(["apples", "oranges"], ["bananas", "grapes"], $text);
// I like bananas and grapes
// 不区分大小写替换
$new = str_ireplace("world", "PHP", "Hello WORLD"); // Hello PHP
// 统计替换次数
$count = 0;
$new = str_replace("a", "A", "banana", $count);
echo $count; // 3
?>
<?php
$text = "My phone is 123-456-7890";
// preg_replace - 正则替换
$new = preg_replace('/\d/', 'X', $text);
// My phone is XXX-XXX-XXXX
// 替换多个空格为一个
$text = "Hello World";
$new = preg_replace('/\s+/', ' ', $text); // Hello World
?>
<?php
// explode - 按分隔符分割
$str = "apple,banana,orange";
$arr = explode(",", $str);
// ["apple", "banana", "orange"]
// 限制分割数量
$arr = explode(",", $str, 2);
// ["apple", "banana,orange"]
// str_split - 按长度分割
$str = "Hello";
$arr = str_split($str); // ["H", "e", "l", "l", "o"]
$arr = str_split($str, 2); // ["He", "ll", "o"]
// preg_split - 正则分割
$str = "apple, banana, orange";
$arr = preg_split('/\s*,\s*/', $str);
// ["apple", "banana", "orange"]
?>
<?php
// implode/join - 数组合并为字符串
$arr = ["apple", "banana", "orange"];
$str = implode(", ", $arr); // apple, banana, orange
$str = join("-", $arr); // apple-banana-orange
// 连接运算符
$str = "Hello" . " " . "World"; // Hello World
?>
<?php
$str = "Hello World";
// 全部转换
strtoupper($str); // HELLO WORLD
strtolower($str); // hello world
// 首字母转换
ucfirst($str); // Hello world(首字母大写)
lcfirst($str); // hello World(首字母小写)
ucwords($str); // Hello World(每个单词首字母大写)
// 多字节字符串转换
$chinese = "你好世界";
mb_strtoupper($chinese); // 你好世界(中文无大小写)
?>
<?php
$str = " Hello World ";
// 去除两端空格
trim($str); // "Hello World"
ltrim($str); // "Hello World "(左侧)
rtrim($str); // " Hello World"(右侧)
// 去除指定字符
$str = "###Hello###";
trim($str, "#"); // "Hello"
// 去除多种字符
$str = " \t\nHello\n\t ";
trim($str); // "Hello"(去除空格、制表符、换行符)
?>
<?php
$str = "Hello World";
// substr - 截取子字符串
substr($str, 0, 5); // "Hello"(从0开始,长度5)
substr($str, 6); // "World"(从6到结尾)
substr($str, -5); // "World"(从倒数第5个开始)
substr($str, 0, -6); // "Hello"(从0到倒数第6个)
// mb_substr - 多字节安全截取
$chinese = "你好世界";
mb_substr($chinese, 0, 2); // "你好"
// 截取并替换
$str = "Hello World";
substr_replace($str, "PHP", 6, 5); // "Hello PHP"
?>
<?php
$str1 = "Hello";
$str2 = "hello";
// 使用运算符
$str1 == $str2; // false(区分大小写)
$str1 === $str2; // false
// strcmp - 字符串比较
strcmp($str1, $str2); // < 0(str1 < str2)
strcasecmp($str1, $str2); // 0(不区分大小写)
// 自然排序比较
strnatcmp("img2.png", "img10.png"); // < 0(正确排序)
?>
<?php
// 格式化输出
$name = "张三";
$age = 25;
$str = sprintf("姓名:%s,年龄:%d", $name, $age);
// 姓名:张三,年龄:25
// 数字格式化
sprintf("%05d", 42); // "00042"(补零)
sprintf("%.2f", 3.1415); // "3.14"(保留2位小数)
sprintf("%'#10s", "test"); // "######test"(填充字符)
// number_format - 数字格式化
number_format(1234567.89, 2); // "1,234,567.89"
number_format(1234567.89, 2, ".", ","); // "1.234.567,89"
?>
<?php
printf("圆周率:%.2f\n", 3.1415926); // 圆周率:3.14
printf("十六进制:%x\n", 255); // 十六进制:ff
?>
<?php
// HTML实体编码
$str = "<script>alert('XSS')</script>";
$safe = htmlspecialchars($str);
// <script>alert('XSS')</script>
// URL编码
$url = "https://example.com?name=张三&age=25";
$encoded = urlencode($url);
$decoded = urldecode($encoded);
// Base64编码
$data = "Hello World";
$encoded = base64_encode($data); // SGVsbG8gV29ybGQ=
$decoded = base64_decode($encoded); // Hello World
?>
<?php
$text = "My email is test@example.com";
// preg_match - 匹配一次
if (preg_match('/\w+@\w+\.\w+/', $text, $matches)) {
echo $matches[0]; // test@example.com
}
// preg_match_all - 匹配所有
$text = "Phone: 123-456-7890, 098-765-4321";
preg_match_all('/\d{3}-\d{3}-\d{4}/', $text, $matches);
print_r($matches[0]); // 所有匹配的电话号码
?>
<?php
// 验证邮箱
function isValidEmail($email) {
return preg_match('/^[\w\.-]+@[\w\.-]+\.\w+$/', $email);
}
// 验证手机号
function isValidPhone($phone) {
return preg_match('/^1[3-9]\d{9}$/', $phone);
}
// 验证身份证
function isValidID($id) {
return preg_match('/^\d{17}[\dXx]$/', $id);
}
?>
mb_* 系列函数=== 比较 strpos 的返回值htmlspecialchars 转义