我正在使用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
有什么想法吗?
答案 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