我正在尝试使用strpos查找字符串是否存在,然后使用substr_replace删除该字符串。我的代码如下:
$title=$item->get_title();
$stringToFind='Help needed identifying this person in ';
if(strpos($title,$stringToFind)){
$title=substr_replace($title,'',0,strlen($stringToFind));
}
然而,当我对strpos进行回声时,它总是返回false,应该是真的。所以我想知道strpos是否不做空白或其他什么?在哪种情况下,有人可以推荐一些东西吗?
答案 0 :(得分:7)
你为什么不试一试:
$searchStr = 'Help needed identifying this person in ';
$title = str_replace($searchStr,'',$title);
PHP文档将str_replace
函数称为
用替换字符串替换所有出现的搜索字符串。
如果$searchStr
变量中未显示$title
,则该字符串将保持不变。
但是,如果它存在 - 它将被删除。您根本不需要测试它是否存在。如果您需要测试是否进行了更改,则可以使用strlen
或mb_strlen
来比较两个字符串的长度,具体取决于您的编码。
输入/输出示例:
常数 - $searchStr = 'Help needed identifying this person in ';
// A match is found - string is changed
IN -> Help needed identifying this person in Timbuktu
OUT -> Timbuktu
IN -> Help needed identifying this person in Zimbabwe
OUT -> Zimbabwe
IN -> Help needed identifying this person in Netanya
OUT -> Netanya
// A match is not found - string remains the same
IN -> Stack Overflow is a programming Q & A site that’s free.
OUT -> Stack Overflow is a programming Q & A site that’s free.
IN -> We don’t run Stack Overflow. You do.
OUT -> We don’t run Stack Overflow. You do.
答案 1 :(得分:1)
搜索到的字符串是否位于0位置?您可能需要使用===
比较,因为以下内容在php中是正确的:
0 == false // true (automatically casted)
0 === false //false (type-sensitive comparison)
所以试试
$title=$item->get_title();
if(strpos($title,'Help needed identifying this person in ') ===false){
$title=substr_replace($title,'',0,strlen($title));
}
答案 2 :(得分:0)
strpos()返回数值或错误时返回false。在这种情况下,它返回0,因为这是它找到字符串的位置。你需要使用
if(strpos($title, $string) !== false) { ...
答案 3 :(得分:0)
如果句子位于字符串的开头,则strpos将返回0.当转换为布尔值时,0等于false。
因此,要停止此问题,您需要进行严格的比较。即:
$title=$item->get_title();
if(strpos($title,$needle) !==false)
{
$title=substr_replace($title,'Help needed identifying this person in ',0,strlen($title));
}
另一个可能的问题是strpos区分大小写。并且1个大写或小写字母将丢弃所有内容。因此,为了防止这种情况,您应该使用stripos
。