我正在为我的网站使用 codeigniter 框架,但在 form_validation 中我收到错误,我按照 stackoverflow 中的此链接操作,但它对我不起作用
跟随链接:5.2.17 中的 idn_to_ascii() https://stackoverflow.com/questions/5405505/idn-to-ascii-in-5-2-17
Issue:
codeigniter 库/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);
}
理想的解决方案是将 ICU 升级到最新版本 http://www.linuxfromscratch.org/blfs/view/8.3/general/icu.html
由于这在我的共享服务器上是不可能的,我解决了这个问题,扩展了 CI 电子邮件库:
-
否决 valid_email() 函数使用INTL_IDNA_VARIANT_UTS46
,不幸的是我的服务器上没有安装。
-
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;
}
}
将此扩展类保存为 MY_email.php 在您的 application/libraries 文件夹中。关于扩展本机库 https://codeigniter.com/userguide3/general/creating_libraries.html?highlight=extending%20library#extending-native-libraries, 前缀MY_
是可配置的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)