用多字节字符串替换“abc123def”和“abc 123 def”

时间:2009-10-09 03:25:34

标签: php multibyte pcre

通常我会这样做。

$str = preg_replace('#(\d+)#', ' $1 ', $str);

如果我知道它将是utf-8,我会在模式中添加一个小写的“u”修饰符,我想我会很好。但由于有报道称utf-8占用了2倍的存储空间,而且使用本机字符集时占用了3倍,我试图不将应用程序限制为utf-8。

因此,我试图远离我最喜欢的preg_函数。

到目前为止,大多数事情都相当简单,但是我在替换方面有点困难,我通常在preg_中使用字符类,例如“\ d”。

2 个答案:

答案 0 :(得分:2)

使用mb_convert_encoding实现存储包装,因此在内部您只需操作UTF-8。

(我仍然认为你应该require UTF-8并为每个人节省很多麻烦。)

答案 1 :(得分:1)

我认为UTF-8编码使得编码输出中字节值为127或更小的任何内容始终是与该字节值匹配的ASCII字符,而不是多字节序列的一部分。所以你可以在这种情况下继续假装编码是ASCII而不会引起问题(因为空格和数字都是ASCII)。

请参阅http://en.wikipedia.org/wiki/UTF-8中的说明,其中显示多字节序列中的所有字节都设置了最高有效位(例如,都是> 127)。