I don't the find above example fully transparent and some users may be confused.
mb_string()
should be used for multi-byte encoding, and what is multi-byte encoding you have explained in other questions, e.g. here.
Recently we use mostly UTF encodings as UTF-8
in this example (also UTF-16
) which is multi-byte character set, however usually we use only ASCII character sets (e.g. for English) and the result of strpos
and mb_strpos
is identical for them.
The difference is visible when we use multi-byte characters, i.e. Chinese characters.
echo mb_internal_encoding(); //UTF-8
echo strpos('我在买绿茶', '在'); //3
echo mb_strpos('我在买绿茶', '在'); //1
So obviously it's applicable to Chinese characters, but also to emoji which some are not aware of.
To give wider view how it works I show length of the following string with strlen()
and mb_strlen()
functions.
echo strlen('我在买绿茶'); //15
echo mb_strlen('我在买绿茶'); //5