2017-04-15 6 views
1

編集:正規表現/ str_replace:mailtoの持つ問題とスマイリー組み合わせ

ユーザーが[email protected]に入ると、目に見える結果は次のようになります。

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

しかし、ユーザーが電子メールを入力した場合@ example.noの場合、目に見える結果は[email protected]となり、リンクになります。ユーザーがリンクをクリックすると、それは自分のコンピュータ上で自分のローカルの電子メールプログラムを要求し、受信者フィールドには、自動充填[email protected]


で問題私がいるで

私は、ユーザーが互いのページにコメントすることができ、サイト上で働いている、と私はクリック可能なURLにURLを置き換えるためにstr_replaceや正規表現を使用しています、「クリッカブルハッシュタグ」、スマイリーコード(にハッシュタグ:P:S、:D )などの画像が

、に私はにpreg_replaceでのmailtoに電子メールを有効にしようと、(私の「舌」-smiley:P )それを破る:ユーザーは、「P」の文字でのmailtoブレークを開始し、電子メールに入り、私は基本的にねじ込んだ

// 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); 

場合。

文字列入力:

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

は、次のようになります(:P)

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

1つの明白な解決策は、スマイリーコードを変更することはもちろんである何か他のものの中に、あるいは単に作成しませんクリック可能な電子メール。しかし、 ":P"はユーザーに広く知られ、使用されているため、ユーザーエクスペリエンスの問題です。また、私は ":S"などのような他のスマイリーを持っているので、これに簡単で実用的な解決策を見つけることを望んでいます。

ご協力いただければ幸いです。

+0

例、入力と期待される出力を使用して記事を更新してください。 p'とあなたが 'エンディングたい:p'は'の代わりに交換する必要があります:p'はhref属性に来 –

+0

はありがとう、私は例今 – kimnthorstensen

+0

は、あなたがこの '[email protected]を持っていると言うことができますが追加されました。そうですか? –

答えて

1

Try this code snippet here

正規表現:/(?<!mailto):(?:P|p)/mailto単語がその前に存在しない場合は、この式は、一致:pまたは:P氏は述べています。

の代わりにこの:

$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'でも動作しますが、次のスマイリーの問題が発生するときはどうなりますか?それも修理しますか?いいえ!質問は不完全なので、私は良い答えを定式化することができます。おそらくもっと良い答えがあります:電子メールコードの前にスマイリーを行います。単にそれらを交換するだけで、問題はもう発生しません。 –

関連する問題