我正在尝试用重音符号或西班牙语字符搜索单词,但它不起作用
if(preg_match('|\b(' . $iText . ')\b|i', $str_content)) {...}
例如,如果我插入
$iText="desempeño";
或
$iText="Función necesaria"
并且它不起作用,当然,我发布带有表单输入的$ iText。
-------------- EDIT --------
我用一个数组代替普通字符解决了ASCII字符:
function prepare($pattern)
{
$replacements =array('À'=>'À', 'à'=>'à', 'Á'=>'Á', 'á'=>'á', 'Â'=>'Â', 'â'=>'â', 'Ã'=>'Ã', 'ã'=>'ã', 'Ä'=>'Ä', 'ä'=>'ä', 'Å'=>'Å', 'å'=>'å', 'Æ'=>'Æ', 'æ'=>'æ', 'Ç'=>'Ç', 'ç'=>'ç', 'Ð'=>'Ð', 'ð'=>'ð', 'È'=>'È', 'è'=>'è', 'É'=>'É', 'é'=>'é', 'Ê'=>'Ê', 'ê'=>'ê', 'Ë'=>'Ë', 'ë'=>'ë', 'Ì'=>'Ì', 'ì'=>'ì', 'Í'=>'Í', 'í'=>'í', 'Î'=>'Î', 'î'=>'î', 'Ï'=>'Ï', 'ï'=>'ï', 'Ñ'=>'Ñ', 'ñ'=>'ñ', 'Ò'=>'Ò', 'ò'=>'ò', 'Ó'=>'Ó', 'ó'=>'ó', 'Ô'=>'Ô', 'ô'=>'ô', 'Õ'=>'Õ', 'õ'=>'õ', 'Ö'=>'Ö', 'ö'=>'ö', 'Ø'=>'Ø', 'ø'=>'ø', 'Œ'=>'Œ', 'œ'=>'œ', 'ß'=>'ß', 'Þ'=>'Þ', 'þ'=>'þ', 'Ù'=>'Ù', 'ù'=>'ù', 'Ú'=>'Ú', 'ú'=>'ú', 'Û'=>'Û', 'û'=>'û', 'Ü'=>'Ü', 'ü'=>'ü', 'Ý'=>'Ý', 'ý'=>'ý', 'Ÿ'=>'Ÿ', 'ÿ'=>'ÿ');
return str_replace(array_keys($replacements), $replacements, $pattern);
}
然后我把这个函数放在if:
中 if(preg_match('|\b(' . prepare($iText) . ')\b|i', prepare($str_content)))
答案 0 :(得分:1)
您需要将u (PCRE_UTF8)
修饰符添加到正则表达式
u(PCRE_UTF8)此修饰符打开PCRE的其他功能 这与Perl不兼容。模式字符串被视为UTF-8。 这个修饰符可以在Unix上从PHP 4.1.0或更高版本获得 win32上的PHP 4.2.3。自PHP以来检查模式的UTF-8有效性 4.3.5。
只需像这样添加..
if(preg_match('|\b(' . $iText . ')\b|ui', $str_content)) {...}
^--- Here