在我的字符串中,我有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),但在UTF-8中编码为C2A0。因此,如果您尝试使用~\x{00a0}~siu模式,它将按预期工作。

关于php - 不间断的utf-8 0xc2a0空间和preg_replace奇怪的行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12837682/

10-11 05:00
查看更多