この形式の文字列からすべてのリンクを削除する関数があります: .... 配列にないドメインへのリンクのみを削除します。リンクのドメインが配列にない場合は、リンク タグが削除され、リンクの内部 html のみが含まれます。
次のようになります。
if(!function_exists("checkLink")){
function checkLink($link, $text){
$safe_domains[] = "domain1.com";
$safe_domains[] = "domain2.com";
$prefix = "";
if(substr($link, 0, 8) == "mailto:"){
// do nothing - link is fine
}
else{
$url = @parse_url($link, PHP_URL_HOST);
$dolink = false;
foreach($safe_domains as $domain){
if(strpos($url, $domain) !== FALSE){
$dolink = true;
break;
}
}
if(!$dolink){
return preg_replace("/<\\/?a(\\s+.*?>|>)/", "", $text);
}
}
return "<a href=\"$link\" target=\"_blank\">$text</a>";
}
}
$post['message'] = preg_replace("/<a href=\\\"(.*?)\\\" target=\\\"_blank\\\">(.*?)<\/a>/ime", 'checkLink("$1", "$2")',$post['message']);
ただし、問題は、次のようなリンクで問題なく動作することです。
<a href="http://example.com" target="_blank">Link text</a>
次のように、リンクに改行があると機能しません。
<a href="http://example.com" target="_blank">Link
text</a>
これに対する解決策を持っている人はいますか?ありがとう!