プログラムの不可解なバグの原因を追跡していたところ、最終的に PHP の strripos 関数の予期しない動作を発見しました。
テストコード (PHP 5.4.24 でテスト済み):
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
echo 'strripos: ';
var_dump(strripos(chr(128), chr(128)));
echo '<br>strrpos: ';
var_dump(strrpos(chr(128), chr(128)));
echo '<br>strpos: ';
var_dump(strpos(chr(128), chr(128)));
echo '<br>stripos: ';
var_dump(stripos(chr(128), chr(128)));
?>
その出力:
strripos:
boolean false
strrpos:
int 0
strpos:
int 0
stripos:
int 0
これは、needle 引数が 127 を超える ASCII コードを持つ 1 バイトの場合に発生します。
これがバグかどうかはわかりません。