idn_to_ascii():INTL_IDNA_VARIANT_2003 已弃用
idn_to_ascii(): INTL_IDNA_VARIANT_2003 is deprecated
我正在为我的站点使用 codeigniter 框架,但在 form_validation 中出现错误 我在 Whosebug 中遵循了此 link 但它对我不起作用
关注 link:
idn_to_ascii() in 5.2.17
问题:
codeigniter 中的代码 libraries/form_validation。php:
public function valid_email($str)
{
if (function_exists('idn_to_ascii') && preg_match('#\A([^@]+)@(.+)\z#', $str, $matches))
{
$domain = defined('INTL_IDNA_VARIANT_UTS46')
? idn_to_ascii($matches[2], 0, INTL_IDNA_VARIANT_UTS46)
: idn_to_ascii($matches[2]);
if ($domain !== FALSE)
{
$str = $matches[1].'@'.$domain;
}
}
return (bool) filter_var($str, FILTER_VALIDATE_EMAIL);
}
理想的解决方案是 upgrade ICU to its latest version
因为这在我的共享服务器上是不可能的,所以我解决了这个问题,扩展了 CI 电子邮件库:
否决了使用 INTL_IDNA_VARIANT_UTS46
的 valid_email() 函数,不幸的是我的服务器上没有安装它。
PhP 7.2 适用于该版本,因此如果您安装了 INTL_IDNA_VARIANT_2003
,则会收到上述已弃用的错误消息。
解决方案:您需要从 2.0 版电子邮件库返回 valid_email() 函数:
class MY_Email extends CI_Email {
public function valid_email($address)
{
return ( ! preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $address)) ? FALSE : TRUE;
}
}
在您的 application/libraries 文件夹中将此扩展 Class 另存为 MY_email.php。关于Extending Native Libraries,前缀MY_
可配置
我正在为我的站点使用 codeigniter 框架,但在 form_validation 中出现错误 我在 Whosebug 中遵循了此 link 但它对我不起作用 关注 link: idn_to_ascii() in 5.2.17
问题:
codeigniter 中的代码 libraries/form_validation。php:
public function valid_email($str)
{
if (function_exists('idn_to_ascii') && preg_match('#\A([^@]+)@(.+)\z#', $str, $matches))
{
$domain = defined('INTL_IDNA_VARIANT_UTS46')
? idn_to_ascii($matches[2], 0, INTL_IDNA_VARIANT_UTS46)
: idn_to_ascii($matches[2]);
if ($domain !== FALSE)
{
$str = $matches[1].'@'.$domain;
}
}
return (bool) filter_var($str, FILTER_VALIDATE_EMAIL);
}
理想的解决方案是 upgrade ICU to its latest version
因为这在我的共享服务器上是不可能的,所以我解决了这个问题,扩展了 CI 电子邮件库:
否决了使用
INTL_IDNA_VARIANT_UTS46
的 valid_email() 函数,不幸的是我的服务器上没有安装它。PhP 7.2 适用于该版本,因此如果您安装了
INTL_IDNA_VARIANT_2003
,则会收到上述已弃用的错误消息。解决方案:您需要从 2.0 版电子邮件库返回 valid_email() 函数:
class MY_Email extends CI_Email { public function valid_email($address) { return ( ! preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $address)) ? FALSE : TRUE; } }
在您的 application/libraries 文件夹中将此扩展 Class 另存为 MY_email.php。关于Extending Native Libraries,前缀MY_
可配置