2017-09-02 163 views
1
从PHP完整的电子邮件地址

解析名称解析名称

我想从完整的电子邮件地址获得名字,并试图ヶ辆和html_entity_decode但特殊字符<和>使问题得到名字。完整的电子邮件地址来自数组(键值)而不是字符串。

阵列值:

Array 
(
    [ENV_MAIL] => "Project Bribara<[email protected]"; 
) 

试过代码:

// Project email 
$environment['ENV_MAIL'] = "Project Bribara<[email protected]"; 
$projectEmail = $environment['ENV_MAIL']; 
echo $projectEmail ; 
$projectName = explode("@", htmlentities($adminEmail)); 
echo html_entity_decode($projectName); 

预期:

"Project Bribara" 

实际:

"Project Bribara<project.bribara 

有人可以帮忙按预期得到输出吗?

+0

如果你有这样的字符串'项目Bribara

+0

特殊字符<给人的问题,已经试过了。 –

+1

你是否期待这样的https://eval.in/853973? –

回答

-1

有,你可以解决这个问题的几种方法:(Demo Link

的原因,所有其他答案的失败是因为你错误地表达了你的输入字符串。您的实际输入字符串包含&lt;这是<的html实体。以下我的方法将向未来的SO读者阐明这一点,并帮助您为您的项目选择最佳方法。

$environment['ENV_MAIL']="Project Bribara&lt;[email protected]"; 
//          ^^^^ html entity causing you trouble 

$decoded_string=html_entity_decode($environment['ENV_MAIL']); // convert "&lt;" to "<" 
var_export(explode('<',$decoded_string)); // generate an array of the two parts for future access 

echo "\n\n"; 

echo "Project Name = ",strstr($decoded_string,'<',true); // use strstr on < of decoded string with "true" param 

echo "\n\n"; 

echo "Project Email = ",substr($decoded_string,strpos($decoded_string,'<')+1); // use substr&strpos on < 

echo "\n\n"; 

// or less potentially damaging to your input string... 
var_export(explode('&lt;',$environment['ENV_MAIL'])); 

输出:

array (
    0 => 'Project Bribara', 
    1 => '[email protected]', 
) 

Project Name = Project Bribara 

Project Email = [email protected] 

array (
    0 => 'Project Bribara', 
    1 => '[email protected]', 
) 
1

你应该使用 “<” 第一拆分串入电子邮件ADDRES秒。如果你愿意,然后与“@”分开。

2

你可以这样做。这里我们使用explode()函数来分割一个字符串。

Try this code snippet here

$environment['ENV_MAIL'] ="Project Bribara<[email protected]"; 
echo explode("<",$environment['ENV_MAIL'])[0]; 
+0

你的解决方案是很好的upvoted,但价值(可能不会看到)的适当htmlentities提出爆炸问题或substr根本不工作。 –

2

您可以使用SUBSTR和strpos。
Substr将字符串从第一个字符分割到strpos发现<的位置。

$str = "Project Bribara<[email protected]"; 
// Or ^^ is $projectEmail if I understand it correct? 

Echo substr($str, 0, strpos($str , "<")); 

https://3v4l.org/qSF4h

如果<导致问题,也许你可以尝试正则表达式?

https://regex101.com/r/EfkwLX/1

// Match a-Z and space multiple until non word character 
$re = '/([a-zA-Z ]+)\W/'; 
$str = 'Project Bribara<[email protected]'; 

preg_match($re, $str, $matches); 

Echo $matches[1]; 

https://3v4l.org/fuEL5

+0

@Alive不知道它是否与OP说'<<有问题,那么我的答案也会失败。要么? – Andreas

+0

在这种情况下,每个人都失败:) :)。我认为OP使用'htmentities()'多次,并且导致问题 –

+0

您的解决方案很好,而且值得推荐,但是由于价值(可能不可见)所导致的问题导致爆炸问题或substr根本无法工作。你能使用正则表达式来推荐一些东西吗? –

-1
// Project email 
$environment['ENV_MAIL'] = "Project Bribara<[email protected]"; 
$projectEmail = $environment['ENV_MAIL']; 
echo $projectEmail; 
$projectName = html_entity_decode ($projectEmail); 
echo $projectName; 
+0

这也适用于我,不知道为什么-ve投票? –