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