美好的一天!
我遇到了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特定的,我认为这会产生问题。有没有人知道如何在\R
中使用str_replace
(preg_replace
}不接受)?我担心这个问题可能会在许多其他情况下发生,而不仅仅是资本chi。
答案 0 :(得分:3)
由于您有Unicode输入,因此必须将/u
标志传递给正则表达式才能正确处理输入:
$v = "line1\nline2\r\nмы хотели бы поблагодарить";
echo preg_replace('/\R/u', "", $v);
// => line1line2мы хотели бы поблагодарить
请参阅IDEONE demo
当模式和输入都包含Unicode字符串文字时,此/u
标志是必需的。