2017-09-02 127 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投票? –