Preg 用 à 替换 utf8 字符集问题

Preg replace utf8 charset issue with à

我正在尝试添加特殊字符串“|||”在换行符、空格和其他字符之后。我这样做是因为我想将我的文本拆分成一个数组。所以我想这样做:

$result = preg_replace("/<br>/", "<br>|||", preg_replace("/\s/", " |||", preg_replace("/\r/", "\r|||", preg_replace("/\n/", "\n|||", preg_replace("/’/", "’|||", preg_replace("/'/", "'|||", $text))))));
$result = preg_split("/[|||]+/", $result);

它适用于每个单词,但包含 à 字符的单词除外。它被替换为�。 我确定问题出在这里,因为我的字符串 $text 显示了 char à.

由于您的模式处理 Unicode 字符串,请传递 /u 修饰符。

此外,您不需要那么多链接的正则表达式替换,将第一个模式分组并在替换中使用反向引用。

使用

preg_replace("/(<br>|[\s’'])/u", "|||", $text)

注意 \s 匹配空格、回车符 returns 和换行符。

详情:

  • (<br>|[\s’']) - 第 1 组捕获
    • <br> - 字符序列
    • | - 或
    • [\s’'] - 空格,'.

参见PHP demo

$text = "Voilà. C'est vrai.";
echo preg_replace("/(<br>|[\s’'])/u", "|||", $text);