PHP str_replace()仅适用于ANSI字符串,因此可以破坏UTF-8字符串.但是,如果只有有效的UTF-8字符串作为参数,那么它是二进制安全的吗?
编辑:我不是在寻找替代函数,我只想知道这个假设是否正确.
bob*_*nce 19
是.UTF-8经过精心设计,允许进行此类和其他类似的非Unicode感知处理.
在UTF-8中,表示有效字符的任何非ASCII字节序列始终以该范围内的字节开头\xC0-\xFF.此字节可能不会出现在序列中的任何其他位置,因此您无法生成与字符的一部分匹配的有效UTF-8序列.
对于较旧的多字节编码不是这种情况,其中字节序列的不同部分是不可区分的.这导致了很多问题,例如尝试替换Shift-JIS字符串中的ASCII反斜杠(其中byte \x5C可能是表示其他内容的字符序列的第二个字节).