PHP strpos()只查找单个字符,而不是整个字符串


PHP strpos() finds just single characters, not a whole string

我有一个奇怪的问题…

我想在日志文件中搜索。

$lines = file($file);
$sampleName = "T3173sGas";
foreach ($lines as &$line) {
if (strpos($line, $sampleName) !== false) {
echo "yes";
  }
}

此代码不工作,日志文件中的$sampleName100%。搜索只适用于单个字符;例如"T""3",而不是"T3"

你知道为什么不工作吗?日志文件的编码是否错误?

谢谢你的帮助!

如果您只能找到单个字符,我会假设您的日志文件是一些多字节字符集,如UTF-16。正如您已经假设的那样,下一步是查阅您试图操作的关于字符编码的日志文件的文档/规范。

然后可以使用字符编码特定的字符串函数,该包称为http://php.net/mbstring。

$encoding = ... ; // encoding of logfile
if (mb_strpos($line, $sampleName, 0, $encoding) !== false) {
    echo "yes";
}

这可以工作,它搜索整个字符串

<?php
$filename = 'test.php';
$file = file_get_contents($filename);
$sampleName = "T3173sGas";
if(strlen(strstr($file,$sampleName))>0)
{
echo "yes"; 
}
?>