我什么时候应该使用mb_strpos(); over strpos();?

时间:2011-04-19 06:03:50

标签: php string strpos

嗯,看着所有这些字符串函数,有时候我会感到困惑。一个是使用mb_函数,另一个是普通函数,所以问题很简单......

我应该何时使用mb_strpos();,何时应该使用普通的strpos();

而且,是的,我知道mb_函数代表多字节,但它真的意味着,如果我只使用utf-8编码的字符串,我应该坚持{ {1}}函数?

提前致谢!

3 个答案:

答案 0 :(得分:6)

只要您希望使用非纯ASCII文本,就应该使用mb_函数。即您可以使用常规字符串函数,即使您使用的是UTF-8,只要您使用它们的所有字符串都只包含ASCII字符。

strpos('foobar', 'foo')  // fine in any (ASCII-compatible) encoding, including UTF-8
strpos('ふーばー', 'ふー') // won't work as expected, use mb_strpos instead

答案 1 :(得分:4)

是的,如果使用UTF-8 (这是一个多字节编码:一个字符可以使用多个字节),则应使用mb_*函数。

非mb函数将对字节起作用,而不是字符 - 当1个字符== 1个字节时,这是正常的;但(例如) UTF-8并非如此。

答案 2 :(得分:3)

我会说是,这是php文档中的描述:

mbstring提供多字节特定字符串函数,可帮助您处理PHP中的多字节编码。除此之外,mbstring处理可能的编码对之间的字符编码转换。 mbstring旨在处理基于Unicode的编码,例如UTF-8和UCS-2以及许多单字节编码以方便 ....

如果您不确定是否已加载mb扩展名,则应先检查,因为mb-string是非默认扩展名。