1

メールサイトを運営しています。HTMLメールの本文のリンクを置き換える正規表現を設定しました。

私が使う:

// remove entire anchors

$body=preg_replace('/<a[^>]*>(.*)<\/a>/iU','[Link Removed]', $body);

// remove links not wrapped in an anchor tag

$body= preg_replace('!((?:www|http://)[^ ]+)!', '[Link Removed]', $body);

私が抱えている問題は、htmlに画像が配置されている場合です。もちろん、img src は [Link Removed] に置き換えられ、壊れた画像がメールに表示されます。画像の src である場合、リンクを置き換えたくありません。

どうすればそれを達成できますか?

4

2 に答える 2

0

正規表現を使用したHTMLの処理に関連する問題をご存知でしょうか。残念ながら、PHPには単純な代替手段がありません

ネガティブルックビハインドを使用する場合、src属性内のURLを無視できます

さらに、wwwオプションを次のように拡張する必要があります(?<!/)wwwwwwスラッシュが前に付いていない)

これはあなたが望むことをします

$body= preg_replace('_(?<!src=["\'])(?:http://|(?<!/)www)\S+_', '[Link Removed]', $body);

ただし、文字参照が属性値の区切り文字として使用されるのを防ぐものは何もないため、画像は次のようになります。

<img src=&#34;http:www.mysite.com/image.png&#34;>

しかし明らかにこれはありそうもない

于 2012-09-21T02:08:00.607 に答える
0

これを試して:

$body= preg_replace('~(?<!src=["\'])(?:www|http://)[^ ]+~', '[Link Removed]', $body);
于 2012-09-21T01:54:06.230 に答える