从多行文本字段中,我得到几个用新行分隔的电子邮件地址。字段值作为JSON字符串存储在数据库中:
{"admin_emails":"email1@domain.com\r\nemail2@domain.com"}
然后我使用json_decode
和explode
解析电子邮件:
$emailStr = json_decode($stringFromDb)->admin_emails;
$emails = explode("\r\n", str_replace("\r", "\r\n", $emailStr) );
接下来,对于表格中的每封电子邮件,我会检查它是否有效并做一些事情:
foreach( $emails as $email )
{
if( filter_var($email, FILTER_VALIDATE_EMAIL) ){
// do stuff with email
}
}
但我遇到以下问题:filter_val
只将第一封电子邮件识别为有效的电子邮件地址。所有后续电子邮件都会被过滤掉。是什么原因导致这些电子邮件无法识别为有效的电子邮件地址?
答案 0 :(得分:0)
您似乎正在用"email1@domain.com\r\nemail2@domain.com"
替换"email1@domain.com\r\r\nemail2@domain.com"
- 换句话说\r\r\n
。所以所有电子邮件在第一次开始后都有换行符,因此无效。
你可以在没有str_replace()
所有人的情况下完成
答案 1 :(得分:0)
Maximus是正确的:
<?php
$s ='{"admin_emails":"email1@domain.com\r\nemail2@domain.com"}';
//Then I decode the emails using json_decode and explode:
$emailStr = json_decode($s)->admin_emails;
$emails = explode("\r\n", $emailStr);
//next, for each email in table, I check if it's valid and do some stuff:
foreach( $emails as $email ) {
if( filter_var($email, FILTER_VALIDATE_EMAIL) ){
echo $email." is valid\n\n";
// do stuff with email
}
}
这会产生:
email1@domain.com有效
email2@domain.com有效