我了解strtolower()
和mb_strtolower()
函数之间的使用/行为差异。并且has been asked之前:)
但我不明白 - strtolower
目前的目的是什么?
是否因为向后兼容性而可用?或者在strtolower
更可取的情况下是否存在一些用例?似乎mb_strtolower()
更安全,更通用,所以我很想在任何地方使用它......
答案 0 :(得分:9)
不是真正的向后兼容性,但能够使用代码而不另外加载多字节字符串扩展。所以代码的可移植性问题。
strtolower()
始终可用。 mb_strtolower()
仅在加载了额外的mbstring模块时可用。功能重载功能允许使用" generic"调用strtolower()
,如果配置了mb_strtolower()
,它将实际执行mb_strtolower()
。所以实际上根本没有必要明确地编码Alive Workers: 5
Cores in use: 200 Total, 200 Used
Memory in use: 782.0 GB Total, 700.0 GB Used
......
这使代码更具可移植性,因为它可以在具有或不具有mbstring扩展名的系统上运行。
答案 1 :(得分:2)
strtolower()
是一个原生函数,与mb_strtolower()
相比总是存在,只有在 mbstring 模块安装\启用时才可用。{/ p>
但是关于为什么应该使用另一个的问题,这很简单。您可以使用两者,只有当需要时才使用mb_strtolower()
,或者可用。
如果您编写脚本,则不应在脚本,文件名,数据库结构等中使用任何特殊字符,因为它应该与语言无关以提高可移植性,这样做可以消除操作系统之间的不一致。脚本在其他环境中的行为可能会有所不同,例如Linux在fs / db操作中区分大小写,而Windows则不然。
脚本不 必须使用自己的特殊字符处理,因为它是不必要的,它将:
strtolower()
比mb_strtolower()
例如,如果您使用其他系统,例如PSR-4 autoloader。
$var = new \ns\ÇavA();
将尝试加载“Çava.php”而不是“çava.php”,因为它使用原生strtolower()
函数创建了一个不稳定的事实,因此无法降低案例。相反,只需保留ASCII。
mb_strtolower()
应仅用于用户输入/输出,其中strtolower()
应用于面向系统的案例格式化。
这就是说; strtolower()
足以满足大多数人的需求,即使对于用户输入/输出也是如此,但问题出现在 和 如何应用该数据。请记住,如果只是输出给用户,那么总是有CSS text-transform方法。
答案 2 :(得分:0)
mbstring
明显更快。 strtolower()
扩展名是非默认的PHP扩展名。这意味着它默认没有启用,但根据我的经验,我从未遇到过没有启用它的托管服务提供商。
你的问题让我想知道他们是否会在性能方面有所不同,所以我写了一个快速的基准测试功能,你可以找到here。
从我在一些随机字符串上运行的几个测试中,似乎mbstring
在执行时至少快了50倍。
如果您知道自己正在处理与strtolower()
兼容的字符串,并且您的字符串非常多,则可能需要检查strtolower()
。