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