Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查字符串是否包含PHP中数组中的值_Php - Fatal编程技术网

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

检查字符串是否包含PHP中数组中的值,php,Php,我使用的是PHP7.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; }

我使用的是PHP7.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's say'hello'替换$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

有什么想法吗?

因为这个问题有悬赏,所以不能将其标记为重复,但问题在于您案例中使用的函数:

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

如上所述,stripos不能很好地处理特殊字符,并产生这种不确定的结果。请改用。

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

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

如上所述,stripos不能很好地处理特殊字符,并产生这种不确定的结果。请改用。

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

1) 检查使用
mb_stripos
是否有效

2) 如果(1)失败,您可能使用错误的编码提供文件。检查文件字符集是否与html字符集元头匹配


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

1) 检查使用
mb_stripos
是否有效

2) 如果(1)失败,您可能使用错误的编码提供文件。检查文件字符集是否与html字符集元头匹配


当您当时必须处理多字节字符时,简单的字符串函数将无法工作。您必须为它使用mb函数。有一个使用多字节字符的mb函数列表,请在此处检查整个列表:

现在,对于查找位置,您可以使用
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

当您当时必须处理多字节字符时,简单的字符串函数将无法工作。您必须为它使用mb函数。有一个使用多字节字符的mb函数列表,请在此处检查整个列表:

现在,对于查找位置,您可以使用
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

无法复制返回false的第一个示例:我认为这可能是一个字符集问题,将使用真实数据更新问题。不管怎么说,这是一个具有真实数据的函数:看起来确实如此:关于如何解决这个问题,有什么想法吗?我试图用utf8_encode()对它们进行编码,但都不起作用。@André在PHP7.1.7中执行求值时返回true。无法复制第一个示例返回false:我认为这可能是一个字符集问题,将用真实数据更新问题。不管怎么说,这是一个具有真实数据的函数:看起来确实如此:关于如何解决这个问题,有什么想法吗?我试着用utf8_encode()对它们进行编码,但都不起作用。@André在PHP7.1.7中执行您的求值返回true。