跟踪我的程序中一个神秘错误的原因,最终我发现了 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 参数是 ASCII 码高于 127 的单个字节时,会发生这种情况。
我不确定这是否是一个错误。