Skip to content

字符串定义

php
<?php
/* 主要有4种方式:

1. 单引号
$str = 'str'

2. 双引号
$str = "str {$var}"

3. <<<'占位符'
$str = <<<'HTML'
HTML;


4.<<<占位符
$str =<<<JS_CODE
JS_CODE;

*/

字符串分类

在 PHP 中字符串主要分为2类:

  • 普通字符串: 只包含 ASSIC 码表中的字符
  • 多字节字符串: 包含所有 unicode 码表中的字符

主要差异:

特性普通字符串函数多字节字符串函数
基本单位字节字符
编码意识无 (二进制安全)有 (需指定编码)
扩展要求内置需要 mbstring 扩展
函数前缀无 (如: strlen, substr)mb_ (如: mb_strlen, mb_substr)
国际化支持有限 (仅 ASCII)完全 (Unicode)

字符串处理函数:

编码建议

直接将所有普通字符串处理函数全部替换为 mb_string 的处理函数

普通函数多字节替代注意事项
strlen()mb_strlen()需指定编码
substr()mb_substr()防止截断字符
strpos()mb_strpos()正确处理字符位置
strtolower()mb_strtolower()语言特定转换
strtoupper()mb_strtoupper()语言特定转换
str_split()mb_str_split() (PHP 7.4+)正确分割字符

一般来说, 这个扩展不需要手动安装, 如果实在不知道有没有可以使用 phpinfo() 查看

php
<?php
$text = "中文测试";

// 普通函数(错误结果)
echo strlen($text); // 输出:12 (UTF-8中每个中文字符占3字节)

echo "<hr/>";

// 多字节函数(正确结果)
echo mb_strlen($text, 'UTF-8'); // 输出: 4

正则表达式

支持正则表达式的函数

注意

PHP 的正则表达式是包裹在一个单引号中的 '/\d+/' 而 JS 是这样的 /\d+/, 其它的是一样的,请查看 JS 正则表达式笔记

正则表达式练习网站: https://regexlearn.com/zh-cn 正则表达式可视化解析工具: https://regex101.com/

php
<?php
echo "<pre>";

// 1. 正则表达式的类型
$regexp = '/(foo)(bar)(baz)/';
echo gettype($regexp); // string, 不像 JS 那样正则是 Regexp 类的实例

// 2. 正则表达式的使用方式
// $regexp:             保存表达式正则的字符串
// 'foobarbaz':         被匹配的字符串
// $matchers:           匹配的结果
// PREG_OFFSET_CAPTURE: 预定义常量, 表示捕获匹配的位置
preg_match($regexp, 'foobarbaz', $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
echo "</pre>";

/*输出信息如下:
Array
(
    [0] => Array
        (
            [0] => foobarbaz
            [1] => 0
        )

    [1] => Array
        (
            [0] => foo
            [1] => 0
        )

    [2] => Array
        (
            [0] => bar
            [1] => 3
        )

    [3] => Array
        (
            [0] => baz
            [1] => 6
        )
)
*/

字符串与数组互转

php
<?php

echo "<pre>";
// 字符串切分为数组
$str1 = "hello,world";
$arr1 = explode(",", $str1); // 用 , 分割 $str 为一个数组, 传入 '' 报错
var_dump($arr1);
// 输出信息如下:
// array(2) {
//   [0]=>
//   string(5) "hello"
//   [1]=>
//   string(5) "world"
// }


// 将数组合并为字符串
$str2 = implode("@", $arr1); // 将数组 $arr 中的每个元素都拼接成一个字符串
echo $str2;
// 输出信息如下:
// hello@world

echo "<hr/>";

// implode 别名 join, 两个方法的效果一模一样
$str3 = join("@", $arr1);
echo $str3; // hello@world

echo "</pre>";

Released under the MIT License.