2017-04-15 81 views
1

編輯:正則表達式/ str_replace函數:問題與郵寄地址和笑臉組合

當用戶進入[email protected],可見結果變成:

[email protected]" class="small">[email protected] 

但如果用戶輸入的郵件@ example.no,可見的結果就是:[email protected],並且它變成了一個鏈接。當用戶點擊鏈接時,它會提示他們的計算機上爲本地電子郵件程序和收件人字段是自動填充[email protected]


這個問題我有

我正在一個網站上用戶可以評論彼此的網頁,我正在使用str_replace和正則表達式來替換網址爲可點擊的網址,標籤爲「可點擊標籤」,笑臉代碼(:P,:S,:D )到圖像等

但是,當我嘗試將電子郵件轉換爲與preg_replace郵件,我的「舌頭」-smiley(:P )打破它:

// MAILTO 
$text = preg_replace('/(\[email protected]\S+\.\S+)/', '<a href="mailto:$1" class="small">$1</a>', $text); 

// SMILEY 
$text = str_replace(':P', '<img src="images/smileys/tongue.png" class="smiley" alt=":P" />', $text); 

如果用戶輸入的電子郵件以字母開頭「P」,這個mailto休息,我基本上是擰。

字符串輸入:

<a href='mailto:[email protected]'>[email protected]</a> 

變爲:

<a href='mailto[SMILEY][email protected]'>[email protected]</a> 

一個明顯的解決方法當然是改變笑臉代碼(:P)轉換成別的東西,或根本就沒有創造可點擊的電子郵件。但是「:P」被用戶廣泛使用和使用,所以這是用戶體驗的問題。另外我還有其他的表情,比如「:S」等,所以我希望找到一個簡單實用的解決方案。

任何幫助將不勝感激!

+0

請更新與實例,投入和預期產出您的文章。 –

+0

謝謝,我現在增加了一個例子 – kimnthorstensen

+0

可以說你有這個'[email protected]:p',你想結束':p'應該被替換而不是':p'進入href屬性。這樣對嗎? –

回答

1

Try this code snippet here

正則表達式:/(?<!mailto):(?:P|p)/這個表達式匹配說或:p:P有之前沒有mailto字。

取而代之的是:

$text = str_replace(':P', '<img src="images/smileys/tongue.png" class="smiley" alt=":P" />', $text); 

使用此:

$text= preg_replace('/(?<!mailto):(?:P|p)/', '<img src="images/smileys/tongue.png" class="smiley" alt=":P" />', $text); 
+0

這是一個糟糕的情況變得更糟。基本上,一個電子郵件地址應該是平面文本,並且從不被視爲HTML。所有kimnthorstensen需要做的不是將他的笑臉代碼應用到電子郵件地址的html中。 –

+0

@KIKOSoftware我參考了OP提到的具體案例,我不認爲需要downvote。請查看OP的意見。它會描述你那個人究竟在尋找什麼。 –

+0

是的,有。用其他不好的代碼修復不好的代碼並沒有幫助。這將適用於'mailto:p',但是當發生下一個笑臉問題時會發生什麼?修復以及?沒有!這個問題是不完整的,所以我可以制定一個很好的答案。一個更好的答案可能是:在電子郵件代碼之前執行笑臉。只需將它們交換並且問題不再發生。 –