是的:我知道。我們應該在使用多字節字符時使用mb_ *函數。但是當我們使用strpos? 讓我們來看看這個代碼(保存在UTF-8)mb_strpos vs strpos,有什麼區別?
var_dump(strpos("My symbol utf-8 is the €.", "\xE2\x82\xAC")); // int(23)
有使用mb_strpos的區別嗎?不會讓這項工作成爲同樣的工作?畢竟,沒有strpos尋找一個字符串(多字節)?是否有理由使用strpos?
是的:我知道。我們應該在使用多字節字符時使用mb_ *函數。但是當我們使用strpos? 讓我們來看看這個代碼(保存在UTF-8)mb_strpos vs strpos,有什麼區別?
var_dump(strpos("My symbol utf-8 is the €.", "\xE2\x82\xAC")); // int(23)
有使用mb_strpos的區別嗎?不會讓這項工作成爲同樣的工作?畢竟,沒有strpos尋找一個字符串(多字節)?是否有理由使用strpos?
對於UTF-8,匹配字節序列與匹配字符序列完全相同。
所以他們都將找到針頭在完全相同的點,而是針,其中作爲strpos
計算任何字節計數mb_strpos
全UTF-8字節sequencees 之前。所以,如果你的字符串有另外的多字節UTF-8序列,結果會有所不同:
strpos("My symbolö utf-8 is the €.", "€") !== mb_strpos("My symbolö utf-8 is the €.", "€", 0, "UTF-8")
但是:
strpos("My symbol utf-8 is the €.", "€") === mb_strpos("My symbol utf-8 is the €.", "€", 0, "UTF-8")
根據使用的字符集和正在搜索的字符串,這可能會也可能不會有所作爲。
strpos()
尋找作爲針傳遞的字節序列。
mb_strpos()
做同樣的事情但它也尊重字符邊界。
因此,如果字節序列出現在字符串中的任何位置,那麼strpos()
將匹配。 mb_strpos()
只有在字節序列也表示一組有效的完整字符時纔會匹配。
這可能有助於:: http://stackoverflow.com/questions/ 5712226 /時,應-I-使用-MB-strpos環比strpos –