如何检查字符串是否包含PHP中的某个中文单词?

时间:2014-06-21 16:04:56

标签: php

我有一个字符串$str = "颜色代码";,我想检查一下这个字符串是否包含"颜色"。我尝试过使用下面的代码,但是我一直在回复。

mb_strpos($str, "颜色", 0 ,"GBK");

3 个答案:

答案 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,但它们分别属于不同的变量类型 - boolint

在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倍。