不间断的utf-8 0xc2a0空间和preg_replace奇怪的行为

在我的字符串中,我有utf-8不间断空格(0xc2a0),我想用其他内容替换它。

当我使用

$str=preg_replace('~\xc2\xa0~', 'X', $str);

它工作正常。

但是当我使用

$str=preg_replace('~\x{C2A0}~siu', 'W', $str);

找不到(并替换)不间断的空间。

为什么?第二个正则表达式有什么问题?

格式\x{C2A0}正确,我也使用过u标志。

回答:

实际上,有关PHP中的转义序列的文档是错误的。使用\xc2\xa0语法时,它将搜索UTF-8字符。但是使用\x{c2a0}语法时,它将尝试将Unicode序列转换为UTF-8编码的字符。

不间断空格是U+00A0(Unicode),但编码方式C2A0与UTF-8相同。因此,如果您尝试使用模式~\x{00a0}~siu,它将按预期工作。

以上是 不间断的utf-8 0xc2a0空间和preg_replace奇怪的行为 的全部内容, 来源链接: utcz.com/qa/414398.html

回到顶部