mb_strpos vs strpos, what's the difference?

半腔热情 提交于 2019-11-28 07:23:35

问题


Yes: I know. We should use mb_* function when we're working with multibyte char. But when we're using strpos? Let's take a look this code (saved in utf-8)

var_dump(strpos("My symbol utf-8 is the €.", "\xE2\x82\xAC")); // int(23)

There is a difference of using mb_strpos? Does't makes this work the same jobs? After all, does't strpos seek a string (multiple byte)? Is there a reason to use instead strpos?


回答1:


For UTF-8, matching the byte sequence is exactly the same as matching character sequence.

So they both will find the needle at exactly the same point, but mb_strpos counts full UTF-8 byte sequencees before the needle, where as strpos calculates any bytes. So if your string had another multi-byte UTF-8 sequence, the results would be different:

strpos("My symbolö utf-8 is the €.", "€") !== mb_strpos("My symbolö utf-8 is the €.", "€", 0, "UTF-8")

But:

strpos("My symbol utf-8 is the €.", "€") === mb_strpos("My symbol utf-8 is the €.", "€", 0, "UTF-8")



回答2:


Depending on the character set in use and the string being searched for, this may or may not make a difference.

strpos() looks for the byte sequence that is passed as the needle.

mb_strpos() does the same thing but it also respects character boundaries.

So strpos() will match if the byte sequence occurs anywhere in the string. mb_strpos() will only match if the byte sequence also represents a valid set of complete characters.



来源:https://stackoverflow.com/questions/13913411/mb-strpos-vs-strpos-whats-the-difference

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!