2013-01-15 70 views
1

使用auto_link()將CMS控制頁面的副本輸出到前端。我有2個電子郵件地址,在存儲的副本中招募@和bankrecruit @。代碼點火器auto_link()搞亂我的電子郵件地址

當我看到前端的第一封電子郵件,招募@,被auto_linked成爲一個鏈接的電子郵件地址,但第二個成爲銀行,然後招聘@電子郵件鏈接。這顯然不是我所期望的。

auto_link()匹配所有招募案例@在這種情況下,bankrec @正在轉換,因爲它首先找到招聘人員並將其轉化。

如果我刪除招聘@然後bankrecruit @工作正常。另外,如果我將名稱更改爲bank @,則兩個地址都按預期工作。

有沒有解決方法?

<p>This is the address [email protected]</p> 
<p>This is the second address [email protected]</p> 

和腳本是:

auto_link($content) 
+0

請張貼您的代碼。 –

+0

echo auto_link($ page_content-> page_body); – rmccallum

+0

這是內容:

這是地址[email protected]

這是第二個地址[email protected]

rmccallum

回答

1

由於@cryptic指出,它是在auto_link方法的錯誤。 (See source)他們正在輸出中找到所有電子郵件地址,然後他們會用錨定版本替換全部(str_replace)。所以......

<p>This is the address [email protected]</p> 
<p>This is the second address [email protected]</p> 

在第一遍的電子郵件[email protected]變得

<p>This is the address <a ...>[email protected]</a></p> 
<p>This is the second address b<a ...>[email protected]</a></p> 

。在第二封電子郵件中,他們嘗試用anchored版本替換[email protected],但str_replace找不到地址,它已被替換。

  1. 擴展URL幫手auto_link方法:

    您可以通過實現自己的定位。 See documentation

  2. 將來自CodeIgniter源的auto_link方法複製到該新的Helper中。
  3. 只替換字符串的第一個匹配項。 See this SO thread

例如:

$str = str_replace($matches['0'][$i], safe_mailto($matches['1'][$i].'@'.$matches['2'][$i].'.'.$matches['3'][$i]).$period, $str); 

成爲

$str = preg_replace('/' . $matches['0'][$i] . '/', safe_mailto($matches['1'][$i].'@'.$matches['2'][$i].'.'.$matches['3'][$i]).$period, $str, 1); 

這應該修復它。我建議不要修改系統的URL_Helper,稍後您可能會遇到一些遷移問題。

希望這會有所幫助。

相關問題