1

auto_link() を使用して、CMS 制御ページからフロント エンドにコピーを出力します。保存されたコピーには、recruit@ と bankrecruit@ の 2 つのメール アドレスがあります。

フロントエンドを見ると、最初のメール、recruit@ はリンクされたメールアドレスになるように auto_linked になっていますが、2 番目のメールは bank になり、recruit@ のメールリンクが続きます。これは明らかに私が期待したものではありません。

auto_link() は、recruit@ のすべてのケースに一致します。この場合、bankrecruit@ は、recruit@ を最初に見つけて変換するときに変換されます。

Recruit@ を削除すると、bankrecruit@ は正常に動作します。また、名前を bank@ に変更すると、両方のアドレスが期待どおりに機能します。

これに対する解決策はありますか?

<p>This is the address a@test.com</p>
<p>This is the second address ba@test.com</p>

スクリプトは次のとおりです。

auto_link($content)
4

1 に答える 1

1

@cryptic が指摘したように、これは auto_link メソッドのバグです。(ソースを参照) 彼らは、出力内のすべての電子メール アドレスを検索し、すべて ( str_replace) を固定バージョンに置き換えます。そう...

<p>This is the address a@test.com</p>
<p>This is the second address ba@test.com</p>

になる

<p>This is the address <a ...>a@test.com</a></p>
<p>This is the second address b<a ...>a@test.com</a></p>

電子メールの最初のパスでa@test.com。2 通目の電子メールでba@test.com、アンカー バージョンに置き換えようとしましたstr_replaceが、アドレスが見つからず、既に置き換えられています。

次の方法で独自の修正を実装できます。

  1. URL ヘルパーの auto_link メソッドを拡張します。ドキュメントを見る
  2. auto_link メソッドを CodeIgniter ソースからその新しいヘルパーにコピーします。
  3. 最初に見つかった文字列のみを置換します。この SO スレッドを参照してください

例えば:

$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 を変更しないことをお勧めします。後で移行の問題が発生する可能性があります。

お役に立てれば。

于 2013-01-15T14:58:53.157 に答える