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