检查字符串是否包含PHP中Array的值

时间:2017-12-30 15:09:03

标签: php

我正在使用PHP 7.1.12并尝试检查数组中的值是否存在于字符串中以执行此操作:

public function checkWords($word) {
    $list = array('extinção','desativação','obrigatório');

    foreach($list as $l) {
        if (stripos($word, $l) !== false) {
            return true;
        } 
    }
    return false;
}

他们称之为函数

echo($this->checkWords('Físicaem desativação/extinção voluntária:23000.010237/2012-46''); //returns false

现在出现了奇怪的部分,如果我转到函数并用let说''你好'替换$ l。

public function checkWords($word) {
        $list = array('extinção','desativação','obrigatório');

        foreach($list as $l) {
            if (stripos($word, 'extinção') !== false) {
                return true;
            } 
        }

    }

函数调用将返回true

echo($this->checkWords('Físicaem desativação/extinção voluntária:23000.010237/2012-46''); //returns true

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

由于此问题具有赏金,因此无法将其标记为重复,但问题在于您的案例中使用的函数:

stripos($word, 'extinção')

当陈述https://github.com/Microsoft/vstest-docs/blob/master/docs/analyze.md时,stripos不能很好地处理特殊字符并产生这种非确定性结果。请改用here

答案 1 :(得分:1)

这似乎是字符串编码的一个问题。

1)检查使用mb_stripos是否有效。 http://php.net/manual/en/function.mb-stripos.php

2)如果(1)失败,您可能使用错误的编码提供文件。检查您的文件字符集是否与您的html charset元标题匹配。 https://developer.mozilla.org/en/docs/Web/HTML/Element/meta

<meta charset="utf-8">

答案 2 :(得分:0)

当你必须处理多字节字符时,简单的字符串函数将不起作用。你必须使用mb函数。有一个mb函数列表,它们使用多字节字符,在这里检查整个列表:

http://php.net/manual/en/ref.mbstring.php

现在,对于查找位置,您可以使用mb_stripos功能。请尝试以下代码:

function checkWords($word) {
    $list = array('extinção','desativação','obrigatório');
    foreach($list as $l) {
        if (mb_stripos($word, $l) !== false) {
            return true;
        } 
    }
    return false;
}

var_dump(checkWords('Físicaem desativação/extinção voluntária:23000.010237/2012-46')); // return true
echo PHP_EOL;
var_dump(checkWords('Físicaema dessativação/extsinção voluntária:23000.010237/2012-46')); //return false

DEMO