Preg_Replace不处理法语字符-PHP

Preg_Replace不处理法语字符-PHP,php,regex,Php,Regex,我已经搜索了一段时间,希望这不是一个已经被问过很多次的问题 我试图在php上编写一个脚本,从字符串中删除停止词,然后将其分解成一个单词数组。停止词可以是英语或法语 目前,以下内容不适用于我,因为它不会删除法语字符: $needles=array( '/\bil\b/i', '/\bla\b/i', '/\ble\b/i', '/\b'. htmlentities('à') .'\b/i' ); print_r($needles); $result=preg_replace($needle

我已经搜索了一段时间,希望这不是一个已经被问过很多次的问题

我试图在php上编写一个脚本,从字符串中删除停止词,然后将其分解成一个单词数组。停止词可以是英语或法语

目前,以下内容不适用于我,因为它不会删除法语字符:

$needles=array(
'/\bil\b/i', 
'/\bla\b/i', 
'/\ble\b/i', 
'/\b'. htmlentities('à') .'\b/i'
);
print_r($needles);

$result=preg_replace($needles, "", htmlentities("il y à trois personne dans la salle à manger"));
print_r($result);

输出将删除所有内容,但不删除法语字符:a

正如注释中所指出的,
htmlentities('a')
将为您提供
[3]=>/\bà\b/i

相反,使用带有
u
标志的
a
在模式中启用Unicode:

'/\bà\b/iu'

:


为什么在这里使用
htmlentities()
?如果您事先同时应用了input和regex模式,那么它将变成
&a→ 其中单词
\b
边界在两端都不匹配。实际上,只有在将文本包含在html中之前(如果需要),才必须使用
htmlentities()
。如果你需要在之前编辑字符串,不要使用它。不得不说我很困惑,因为我收到的文本有这些重音,我认为htmlentities至少可以让我将所有内容规范化为UTF 8。在这里要做什么,甚至用à;不会从字符串中删除重音字符。Arghh!UTF8不是你所想的。噢,哇,谢谢你的帮助。这解决了我的问题,我对何时使用htmlentities有了更好的理解。
<?php
$needles=array(
'/\bil\b/i', 
'/\bla\b/i', 
'/\ble\b/i', 
'/\bà\b/iu'
);
print_r($needles);

$result=preg_replace($needles, "", "il y à trois personne dans la salle à manger");
print_r($result);
y  trois personne dans  salle  manger