【问题标题】:php, what is the difference between strtolower and mb_strtolower?php,strtolower和mb_strtolower有什么区别?
【发布时间】:2010-10-26 09:22:56
【问题描述】:

在 PHP 中,strtolowermb_strtolower 有什么区别?

如果我想将提交的电子邮件地址转换为小写,我应该使用哪一个?有没有这样的邮箱:Name@Domain-Test.com

如果有这样的email,提交的email地址还要转小写吗?

【问题讨论】:

    标签: php string email


    【解决方案1】:

    strtolower();不适用于波兰字符

    <?php strtolower("mĄkA"); ?>
    

    将返回:mĄka;

    最佳解决方案 - 使用 mb_strtolower()

    <?php mb_strtolower("mĄkA",'UTF-8'); ?> 
    

    将返回:mąka

    请参阅 PHP 手册中的 strtolower()mb_strtolower()

    【讨论】:

      【解决方案2】:

      strtolower 和 mb_strtolower 有什么区别?

      mb_* 函数适用于多字节字符串。手册说:

      与 strtolower() 相比,'alphabetic' 由 Unicode 字符属性决定。因此,此函数的行为不受语言环境设置的影响,它可以转换任何具有“字母”属性的字符,例如 A-umlaut (Ä)。

      -

      有没有这样的邮件:Name@Domain-Test.com

      是的,我想可能会有这样的电子邮件地址。我发现一般来说,电子邮件地址是不区分大小写的,所以我不会费心更改它们的大小写。

      【讨论】:

      • 我收到了一封电子邮件:xxx@Gmail.com 我的服务器无法向他发送电子邮件。电子邮件发送是自动生成的
      • 域不区分大小写。理论上,发送到 GoOgLE.com 应该和发送到 google.com 一样有效。
      • 但是,由于电子邮件地址不区分大小写,这意味着用户可能不会总是以相同的方式将其大写,如果您的登录系统将他们的登录凭据与电子邮件地址进行比较,这可能会导致问题区分大小写的数据库。
      【解决方案3】:

      mb_ 函数也适用于Multi-Byte (unicode) 字符串。电子邮件地址不应该区分大小写 - 没有太多理由将它们转换为小写。

      【讨论】:

      • 根据 about.com,关于 RFC 2821,“本地地址” 区分大小写(MTA 在实践中是否这样对待它完全是另一个问题),而域不区分大小写。请参阅:email.about.com/od/emailbehindthescenes/f/email_case_sens.htm 因此,最佳做法是在您计划使用的任何地址上保持大小写不变。不过,转换为小写进行比较/评估唯一性可能是有意义的。
      【解决方案4】:

      如果你在一个 unicode 字符串上使用这个函数而不告诉 PHP 它是 unicode,那么你会损坏你的字符串。特别是,带有波浪号的大写“A”(常见于 2 字节 UTF-8 字符)被转换为带有波浪号的小写“a”。

      mb_strtolower() 非常慢,如果您有数据库连接,您可能希望使用它将字符串转换为小写。甚至latin1/9 (iso-8859-1/15) 和其他编码也是可能的。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-10
      • 2018-11-18
      • 1970-01-01
      • 2016-03-20
      • 2012-03-08
      • 2011-03-10
      • 2022-12-13
      • 2018-12-20
      相关资源
      最近更新 更多