mb_str_replace()...很慢。有什么替代方案吗?
我想确保我正在运行的一些字符串替换是多字节安全的。我在网上找到了一些 mb_str_replace 函数,但它们很慢。我说的是在传递大约 500-900 字节后增加了 20%。
有什么建议吗?我正在考虑使用 preg_replace 因为它是本机的并且是编译的,所以它可能会更快。任何想法将不胜感激。
I want to make sure some string replacement's I'm running are multi byte safe. I've found a few mb_str_replace functions around the net but they're slow. I'm talking 20% increase after passing maybe 500-900 bytes through it.
Any recommendations? I'm thinking about using preg_replace as it's native and compiled in so it might be faster. Any thoughts would be appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
由于当有来自任何地方(utf8 或其他)的输入时,编码是一个真正的挑战,因此我更喜欢仅使用多字节安全函数。对于
str_replace
,我使用这个,它足够快。As encoding is a real challenge when there are inputs from everywhere (utf8 or others), I prefer using only multibyte-safe functions. For
str_replace
, I am using this one which is fast enough.这是我的实现,基于 Alain 的回答:
他不接受字符编码,尽管我想你可以通过设置它
mb_regex_encoding
。我的单元测试通过:
Here's my implementation, based off Alain's answer:
His doesn't accept a character encoding, although I suppose you could set it via
mb_regex_encoding
.My unit tests pass:
http://php.net/manual/en/ref 上评价最高的注释。 mbstring.php#109937 表示
str_replace
适用于多字节字符串。Top rated note on http://php.net/manual/en/ref.mbstring.php#109937 says
str_replace
works for multibyte strings.正如所说有,只要所有参数都是 utf-8 有效的,str_replace 在 utf-8 上下文中就可以安全使用,因为它不会在两个多字节编码字符串之间出现任何模糊匹配。如果您检查输入的有效性,则无需寻找不同的函数。
As said there, str_replace is safe to use in utf-8 contexts, as long as all parameters are utf-8 valid, because it won't be any ambiguous match between both multibyte encoded strings. If you check the validity of your input, then you have no need to look for a different function.