不间断的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