美好的一天!
我在使用 preg_replace
和 utf-8 字符时遇到一些问题。以下代码片段:
$v = "line1\nline2\r\nмы хотели бы поблагодарить";
print $v;
print preg_replace("#\R#", "", $v);
print preg_replace("\n", "", $v);
返回以下输出:
line1
line2
мы хотели бы поблагодарить
line1line2мы �отели бы поблагодарить
line1line2
мы хотели бы поблагодарить Вас
由于某种原因,使用 \R
时 х 不可读,但使用 \n
时不受影响。由于 \R
是 PHP 特定的,我认为这会产生问题。有人知道如何在 preg_replace
中使用 \R
(str_replace
不接受)吗?我担心这个问题可能会在许多其他情况下发生,而不仅仅是资本气。
最佳答案
由于您有 Unicode 输入,因此必须将 /u
标志传递给正则表达式才能正确处理输入:
$v = "line1\nline2\r\nмы хотели бы поблагодарить";
echo preg_replace('/\R/u', "", $v);
// => line1line2мы хотели бы поблагодарить
当模式和输入都可以包含 Unicode 字符串文字时,需要此 /u
标志。
关于PHP 多字节安全 preg_replace 对比。字符串替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32563895/