preg_replace 非英文字符的正则表达式错误,无法识别字符
preg_replace error with regex with non-english characters, character is not recognized
我正在使用以下函数从字符串中删除 white-spaces:
$str = preg_replace('/\s+/', '', $str);
我正在输入这串法语字符:ù û ü ÿ à â æ ç é è ê ë ï î ô
注意每个字符之间都有一个 space。
无法识别 à
字符;这是输出的样子:ùûüÿ�âæçéèêëïîô
知道为什么吗?我也尝试过将 str 转换为 UTF-8,但无济于事。
更新:我发现以下 post (Weird problem with preg_replace and chinese character),其中将 u
添加到正则表达式的末尾可以更正问题,如下所示:
$str = preg_replace('/\s+/u', '', $str);
这似乎可以解决问题,但有人可以解释为什么会发生这种情况,并提供官方解决方案来解释 u
在此正则表达式中的作用吗?
默认情况下,PHP 正则表达式引擎将您的字符串视为一组字节(即一组单字节字符)。
当您使用 u 修饰符时,正则表达式引擎会改变两件事:
- 字符串被视为 utf8 字符串(因此字符最终被编码成多个字节)
- shorthand 字符 类 的含义(如
\s
、\w
、\d
...)更改为包含 unicode 字符,而不是仅包含ascii 字符。
请注意,这两个更改也可以这样显式地写在模式的开头,而不是使用 u 修饰符:
(*UTF8)(*UCP)yourpattern
您可以找到 PHP here 使用的 pcre 正则表达式引擎的完整文档。
我正在使用以下函数从字符串中删除 white-spaces:
$str = preg_replace('/\s+/', '', $str);
我正在输入这串法语字符:ù û ü ÿ à â æ ç é è ê ë ï î ô
注意每个字符之间都有一个 space。
无法识别 à
字符;这是输出的样子:ùûüÿ�âæçéèêëïîô
知道为什么吗?我也尝试过将 str 转换为 UTF-8,但无济于事。
更新:我发现以下 post (Weird problem with preg_replace and chinese character),其中将 u
添加到正则表达式的末尾可以更正问题,如下所示:
$str = preg_replace('/\s+/u', '', $str);
这似乎可以解决问题,但有人可以解释为什么会发生这种情况,并提供官方解决方案来解释 u
在此正则表达式中的作用吗?
默认情况下,PHP 正则表达式引擎将您的字符串视为一组字节(即一组单字节字符)。
当您使用 u 修饰符时,正则表达式引擎会改变两件事:
- 字符串被视为 utf8 字符串(因此字符最终被编码成多个字节)
- shorthand 字符 类 的含义(如
\s
、\w
、\d
...)更改为包含 unicode 字符,而不是仅包含ascii 字符。
请注意,这两个更改也可以这样显式地写在模式的开头,而不是使用 u 修饰符:
(*UTF8)(*UCP)yourpattern
您可以找到 PHP here 使用的 pcre 正则表达式引擎的完整文档。