我正在对表单进行快速重复检查.比较两个字符串时,我尝试这样的事情:
if (stripos($_SESSION['website'], $f['website']))
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Fatal error: Call to undefined function: stripos() in...
Run Code Online (Sandbox Code Playgroud)
我不希望它完全匹配,基本上如果$_SESSION['website']
是www.google.com,我想要stripos
返回,true
如果$f['website]
是www.goog.com
我做错了什么,或者有更好的方法吗?
编辑:我正在做一些测试,并注意到我的$_SESSION['website']
变量是否包含www
和.com
.和我的$f['website]
变量一样.不应该那样strpos
回归吗?
stripos(),根据手册仅存在于PHP 5或更高版本的核心.如果stripos不存在,那就表明你正在使用PHP 4,这已经过时了.我建议你升级.如果由于某些疯狂的原因你真的不能,你可以在调用strpos之前总是将两个字符串强制为小写,这将产生相同的效果:
<?php
// PHP 5.
$pos = stripos( 'www.google.com', 'google.com' );
// PHP 4.
$pos = strpos( strtolower( 'www.google.com' ), strtolower( 'google.com' ) );
Run Code Online (Sandbox Code Playgroud)
也就是说,您的代码还有更多内容:if( stripos( $foo, $bar ) )
如果字符串$foo
以字符串开头,您将检查哪些将返回0 $bar
.你应该检查一下if( stripos( $foo, $bar ) !== false )
.
另一方面:我不认为stripos会帮助你.你提到的www.google.com
和www.goog.com
,这是两个完全不同的事情.后者不是前者的子串,并且stripos检查子串的起始位置,它不进行"松散比较".
如果你想要"喜欢"并且你有一个数组中的术语,你可能想要检查一下similar_text()函数,它会告诉你两个不同字符串有多相似.举个例子:
<?php
$similarity = 0;
similar_text( 'www.goog.com', 'www.google.com', $similarity );
var_dump( $similarity );
Run Code Online (Sandbox Code Playgroud)
上面的代码将设置$similarity
为float(92.307692307692)
,这是两个字符串的百分比的相似性.您自然可以自己决定相似性的阈值.