在我的字符串中,我有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/