PHP String

String function reference: search, slice, replace, case, encoding.

Intermediate
Key PointsFor CJK text always use `mb_*`; `str_*` works on bytes.

Searching

FunctionReturnsNote
strpos首次出现的位置找不到返回 false,用 === false 判断
strrpos最后一次出现的位置同上
str_contains是否包含(bool)PHP 8,最直观
str_starts_with是否以…开头PHP 8
str_ends_with是否以…结尾PHP 8
substr_count出现次数不重叠计数
mb_strpos按字符定位中文必用
PHP
<?php
$s = "Hello PHP, hello world";

var_dump(strpos($s, "hello"));
var_dump(strrpos($s, "hello"));
var_dump(str_contains($s, "PHP"));
var_dump(str_starts_with($s, "Hello"));
var_dump(str_ends_with($s, "world"));
var_dump(substr_count($s, "l"));
Output
int(13)
int(13)
bool(true)
bool(true)
bool(true)
int(5)
strpos returns 13 because it is case-sensitive — Hello does not match. Use stripos to ignore case.

Slice and replace

PHP
<?php
$s = "Hello PHP";

echo substr($s, 6), "\n";
echo substr($s, -3), "\n";
echo substr($s, 0, 5), "\n";
echo substr_replace($s, "World", 6), "\n";
echo str_replace(["Hello", "PHP"], ["Hi", "PHP8"], $s), "\n";
echo str_ireplace("hello", "Hi", $s), "\n";
echo strtr("abc", ["a" => "1", "b" => "2"]), "\n";
echo ucwords("hello big world"), "\n";
echo lcfirst("Hello"), "\n";
Output
PHP
PHP
Hello
Hello World
Hi PHP8
Hi PHP
12c
Hello Big World
hello

str_replace applies sequentially, so earlier results can be replaced again. strtr maps in one pass — better for encoding tables.

Padding and formatting

PHP
<?php
echo str_pad("7", 3, "0", STR_PAD_LEFT), "\n";
echo str_pad("7", 3, "-", STR_PAD_RIGHT), "\n";
echo str_pad("7", 5, "*", STR_PAD_BOTH), "\n";
echo str_repeat("ab", 3), "\n";
echo wordwrap("The quick brown fox", 10, "\n", true), "\n";
echo nl2br("a\nb"), "\n";
echo sprintf("%08.3f", 3.14159), "\n";
Output
007
7--
**7**
ababab
The quick
brown fox
a<br />
b
0003.142

Multibyte

PHP
<?php
$cn = "你好世界";

echo strlen($cn), "\n";
echo mb_strlen($cn), "\n";
echo mb_substr($cn, 1, 2), "\n";
echo mb_strpos($cn, "世"), "\n";
echo mb_strtoupper("straße"), "\n";
echo mb_convert_case("hello world", MB_CASE_TITLE), "\n";
Output
12
4
好世
2
STRASSE
Hello World
mb_strtoupper("straße") yields STRASSE — ß expands to two characters. Any code assuming length is preserved breaks here.

Encoding conversion

PHP
<?php
$gbk = mb_convert_encoding("中文", "GBK", "UTF-8");
echo strlen($gbk), "\n";

$back = mb_convert_encoding($gbk, "UTF-8", "GBK");
echo $back, "\n";

// 检测编码(不可靠,只能作为参考)
echo mb_detect_encoding("中文", ["UTF-8", "GBK"], true), "\n";
Output
4
中文
UTF-8
mb_detect_encoding often guesses wrong on short strings — GBK and UTF-8 byte ranges overlap. Never use it for security decisions.

Friends & Partners