Когда вы используете многобайтовые кодировки, один символ может быть представлен переменным числом байтов (например, в UTF-8 от 1 до 4).Это отличается от однобайтовых кодировок, где каждый байт всегда представляет ровно один символ.
Рассмотрим строку из двух символов, закодированную в UTF-8, где первый символ представляет 3 байта, а второйзанимает всего 1 (все символы с порядковым номером <128 имеют это свойство в UTF-8, поэтому давайте используем <code>'a' для примера).
В этой ситуации iconv_strpos($string, 'a')
вернет 1 (второй символ'a'
), тогда как strpos($string, 'a')
вернет 3 (ссылаясь на четвертый символ, поскольку он не может сказать, что первые три байта на самом деле просто один символ; предполагается, что кодировка однобайтовая).