По сути, не имеет значения, какие данные вы читаете - strlen()
и др. должен всегда работать.
Я думаю, что здесь происходит то, что на вашем сервере strlen()
внутренне перекрывается mb_strlen()
, а внутренняя кодировка символов установлена в UTF-8.
UTF-8 является многобайтовой кодировкой, поэтому некоторые символы в вашем (дико произвольном) байтовом потоке интерпретируются как многобайтовые символы - в результате сокращается длина 373821
вместо 553700
.
Я не могу придумать лучшего обходного пути, чем всегда явное указание однобайтовой кодировки, такой как iso-8859-1
:
$pos = strpos($content, '<x:xmpmeta', 0, 'iso-8859-1');
это заставляет strpos()
(точнее, mb_strpos()
) считать каждый байт данных.
Это всегда будет работать; Я не знаю, существует ли более элегантный способ форсировать использование однобайтовой кодировки.