我有一个字符串$str = "颜色代码";
,我想检查一下这个字符串是否包含"颜色"
。我尝试过使用下面的代码,但是我一直在回复。
mb_strpos($str, "颜色", 0 ,"GBK");
答案 0 :(得分:1)
也许您忘记检查值是否为整数:
if(mb_strpos($str, "颜色", 0 ,"GBK")===false)
echo "The value does not contain \"颜色\"\n";
else
echo "\"颜色\" is part of the string."
三个=
调用严格的类型比较。通常情况下,false
等于0
,但它们分别属于不同的变量类型 - bool
和int
。
在strpos的文档中,行为类似,有一个很大的红色警告:
警告强>
此函数可能返回布尔 FALSE ,但也可能返回a 非布尔值,其值为 FALSE 。请阅读有关的部分 Booleans了解更多信息。使用=== operator进行测试 返回此函数的值。
答案 1 :(得分:0)
尝试使用utf8_decode
:
mb_strpos($str, utf8_decode("颜色"), 0 ,"GBK");
答案 2 :(得分:0)
代码确实有效:
$str = "颜色代码";
$test = mb_strpos($str, "颜色", 0 ,"GBK");
echo $test;
但您遇到的问题是因为颜色
strpos
返回0
这是正确的字符串位置,但您的代码逻辑可能会误解为false
。要查看我的意思,请使用颜色
并将其放在字符串的末尾,如下所示:
$str = "代码颜色";
$test = mb_strpos($str, "颜色", 0 ,"GBK");
echo $test;
返回的字符串位置也是3,这也是正确的。更简单地查看字符串中是否颜色
的方法是使用preg_match
,如下所示:
$str = "颜色代码";
$test = preg_match("/颜色/", $str);
echo $test;
那个输出就是一个布尔1
,相当于true
,我相信你正在寻找它。
除了按预期工作的功能外,使用preg_match
优于mb_strpos
as shown here还有明显的速度优势。
mb_strpos: 3.7908554077148E-5
preg_match: 1.1920928955078E-5
与preg_match
相比,使用mb_strpos
的速度提高了3倍。