我为什么要使用strtolower()而不是mb_strtolower()?

时间:2016-09-19 15:03:53

标签: php

我了解strtolower()mb_strtolower()函数之间的使用/行为差异。并且has been asked之前:)

但我不明白 - strtolower目前的目的是什么?

是否因为向后兼容性而可用?或者在strtolower更可取的情况下是否存在一些用例?似乎mb_strtolower()更安全,更通用,所以我很想在任何地方使用它......

3 个答案:

答案 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()
  • 快得多
  • 如果 mbstring 在服务器上不可用,则会失去便携性。

例如,如果您使用其他系统,例如PSR-4 autoloader

$var = new \ns\ÇavA();

将尝试加载“Çava.php”而不是“çava.php”,因为它使用原生strtolower()函数创建了一个不稳定的事实,因此无法降低案例。相反,只需保留ASCII。

mb_strtolower()应仅用于用户输入/输出,其中strtolower()应用于面向系统的案例格式化。

这就是说; strtolower()足以满足大多数人的需求,即使对于用户输入/输出也是如此,但问题出现在 如何应用该数据。请记住,如果只是输出给用户,那么总是有CSS text-transform方法。

答案 2 :(得分:0)

简短回答

  • 您并不总是确定{/ 1}}扩展程序可在您的环境中使用
  • mbstring明显更快。

多一点

strtolower()扩展名是非默认的PHP扩展名。这意味着它默认没有启用,但根据我的经验,我从未遇到过没有启用它的托管服务提供商。

你的问题让我想知道他们是否会在性能方面有所不同,所以我写了一个快速的基准测试功能,你可以找到here

从我在一些随机字符串上运行的几个测试中,似乎mbstring 在执行时至少快了50倍

如果您知道自己正在处理与strtolower()兼容的字符串,并且您的字符串非常多,则可能需要检查strtolower()