Codeigniter 3.1.7 valid_email问题

Evg*_*eny 6 php codeigniter

我有两个网站使用Codeigniter.今天我已将网站更新为Codeigniter 3.1.7(来自3.1.6).之后,在其中一个网站上,电子邮件验证已经中断,valid_email验证规则不再有效.在第二个网站上都很好.我检查了错误日志并发现错误:

ERROR - 2018-02-06 10:13:21 --> Severity: Warning --> idn_to_ascii() expects parameter 3 to be long, string given /public_html/system/libraries/Form_validation.php 1235
Run Code Online (Sandbox Code Playgroud)

Codeigniter的changlog说:

Updated Form Validation Library rule valid_email to use INTL_IDNA_VARIANT_UTS46 for non-ASCII domain names.
Run Code Online (Sandbox Code Playgroud)

在我看来,INTL_IDNA_VARIANT_UTS46常数没有定义.网站使用PHP Version 5.6.30

我该如何解决这个问题?

Evg*_*eny 6

我在这里找到了关于这个问题的讨论。

问题是过时的 ICU 库(已安装 ICU 版本 4.2.1)


小智 5

转到 system/library/email.php 并替换 valid_email()

    public function valid_email($email)
    {
    if (function_exists('idn_to_ascii') && defined('INTL_IDNA_VARIANT_UTS46') && $atpos = strpos($email, '@'))
    {
        $email = self::substr($email, 0, ++$atpos).idn_to_ascii(self::substr($email, $atpos), 0, INTL_IDNA_VARIANT_UTS46);
    }
    return (bool) filter_var($email, FILTER_VALIDATE_EMAIL);
   }
Run Code Online (Sandbox Code Playgroud)