PHP 多字节安全 preg_replace 对比。字符串替换

标签 php regex escaping

美好的一天!

我在使用 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мы хотели бы поблагодарить

参见IDEONE demo

当模式和输入都可以包含 Unicode 字符串文字时,需要此 /u 标志。

关于PHP 多字节安全 preg_replace 对比。字符串替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32563895/

相关文章:

python - 正则表达式: How to name a group using match result

javascript - 使用包含双引号的字符串填充输入字段

Javascript 在符号 "&"上退出

PHP-array_multisort?排序邮政编码(邮政编码)

PHP MySQL错误设置

regex - 口径搜索和替换

batch-file - 如何转义 `@` 中的 `forfiles` 变量替换?

PHP从url中删除奇怪的反斜杠

php - 使用 PHP 将图像插入 MySQL 数据库

javascript - 加入正则表达式数组