使用PHP将电子邮件文本转换为链接
基于我在这里回答的一个问题(),我希望能够过滤输出文本中的电子邮件地址,并将这些文本电子邮件转换为“mailto”链接 下面是可以工作的PHP代码,但仅用于将一些HTML转换为其他HTML。我试着让这个函数查找电子邮件地址,并将其转换为“mailto”链接。无论出于何种原因,代码都不会转换电子邮件地址。以下是我的PHP:使用PHP将电子邮件文本转换为链接,php,mailto,Php,Mailto,基于我在这里回答的一个问题(),我希望能够过滤输出文本中的电子邮件地址,并将这些文本电子邮件转换为“mailto”链接 下面是可以工作的PHP代码,但仅用于将一些HTML转换为其他HTML。我试着让这个函数查找电子邮件地址,并将其转换为“mailto”链接。无论出于何种原因,代码都不会转换电子邮件地址。以下是我的PHP: function text_filter($string) { $search = array('<p>__</p>', '/[a-zA-
function text_filter($string) {
$search = array('<p>__</p>', '/[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}/');
$replace = array('<hr />', '<a href="mailto:$2">$2</a>');
$processed_string = str_replace($search, $replace, $string);
echo $processed_string;
}
函数文本过滤器($string){
$search=array(“”,“/[a-zA-Z0-9.\u-]+@[a-zA-Z0-9.-]+\[a-zA-Z]{2,4}/”;
$replace=数组(“
,”);
$processed_string=str_replace($search,$replace,$string);
echo$processed_字符串;
}
当我将此函数用于输出时,代码是这样的:
<?php text_filter( get_the_content() ); ?>
不能使用
str\u replace
执行正则表达式替换
您需要将操作拆分
function text_filter($string) {
$search = array('<p>__</p>');
$replace = array('<hr />');
$processed_string = str_replace($search, $replace, $string);
$processed_string = preg_replace('/[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}/','<a href="mailto:$2">$2</a>',$processed_string);
echo $processed_string;
}
函数文本过滤器($string){
$search=array('\uuu');
$replace=数组(“
”);
$processed_string=str_replace($search,$replace,$string);
$processed_string=preg_replace('/[a-zA-Z0-9.\-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}/',''.$processed_string);
echo$processed_字符串;
}
有关preg更换,请参阅
str\u replace()
不使用正则表达式,用preg\u replace()
重写$1
到$2
的替换函数文本过滤器($string){
$search=array('/\\/','/([a-zA-Z0-9.\-]+@[a-zA-Z0-9.-]+\[a-zA-Z]{2,4})/');
$replace=数组(“
,”);
$processed_string=preg_replace($search,$replace,$string);
echo$processed_字符串;
}
另一种按顺序操作的方法,以便它可以处理文本中的现有html链接:
function html_parse_text($text)
{
$text = preg_replace("/(?<!\")(((f|ht){1}tps?:\/\/)[-a-zA-Z0-9@:%_\+.~#?&\/\/=]+)/",
'<a href="\\1" target=_blank>\\1</a>', $text);
$text = preg_replace("/([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&\/\/=]+)/",
'\\1<a href="http://\\2" target=_blank>\\2</a>', $text);
$text = preg_replace("/(?<!\")([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})/",
'<a href="mailto:\\1" target=_blank>\\1</a>', $text);
return $text;
}
函数html\u parse\u text($text)
{
$text=preg_replace(“/(?这里是另一个版本,它似乎适合我。我添加了+char来处理“加寻址”(就像一些+email@address.com)
函数替换电子邮件($text){-
$ex=“/([a-zA-Z0-9.\+-]+@[a-zA-Z0-9.-]+\[a-zA-Z]{2,4})/”;
preg_match_all($ex,$text,$url);
foreach($url[0]为$k=>$v)$text=str_replace($url[0][$k],“”,$text);
返回$text;
}
@Adam Baney-即使重复使用,也可以使用
//电子邮件
$str=preg_replace(“~(^ |[\s\,;\n\(])([a-zA-Z0-9.+-]+@[a-zA-Z0-9.-]+\[a-zA-Z]{2,4})~”,
'$1',
$str);
//电话号码
$str=preg_replace_callback('~(^ |[\s\,;\n\(]))(?我们知道函数调用的样子,给我们看看输出。编辑:事实上,我可以告诉你它不起作用,因为str_replace()
无法识别正则表达式。请使用preg_replace()
。谢谢你的帮助!你关于preg_替换的回答是正确的,但是,你提供的代码不起作用。电子邮件地址完全消失了。由P标记包围的2个下划线被替换为水平规则。下面Sammitch的回答非常有效!很高兴听到,没有测试reqular表达式,因此它是P很可能它不起作用;)工作得很好!我现在有另一个问题。我正在使用一个WordPress插件来混淆电子邮件地址。我必须禁用这个插件,这样上面的功能才能正常工作。有没有办法在这个代码中添加一些电子邮件混淆?非常感谢!!刚刚发现了第二个问题:如果一个邮件地址已经被加密在页面中,上述函数也将尝试转换该电子邮件。不幸的是,在电子邮件mailto链接之前添加了一些HTML代码,例如。“mail@example.com?主题=主题“>”,其中mail@example.com是一个功能齐全/可点击的mailto链接。有什么想法吗?这非常适合将电子邮件转换为“emailto”但是,如果电子邮件地址已链接,则链接不起作用。以下是输出的HTML:“>
与上面的注释相同…将电子邮件转换为“emailto”链接非常有效,但是,如果电子邮件地址已链接,则此操作不起作用。以下是输出的HTML:”>
输出的HTML变得非常混乱,多次重复站点文本中的HTML链接。下面是一个屏幕截图:
function obfuscate_email($content){
$pattern = '#([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.';
$pattern .= '[a-wyz][a-z](fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z)?)#i';
$replacement = '<a href="mailto:\\1">\\1</a>';
$content = preg_replace($pattern, $replacement, $content);
return $content;
}
add_filter( 'the_content', 'obfuscate_email' );
function html_parse_text($text)
{
$text = preg_replace("/(?<!\")(((f|ht){1}tps?:\/\/)[-a-zA-Z0-9@:%_\+.~#?&\/\/=]+)/",
'<a href="\\1" target=_blank>\\1</a>', $text);
$text = preg_replace("/([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&\/\/=]+)/",
'\\1<a href="http://\\2" target=_blank>\\2</a>', $text);
$text = preg_replace("/(?<!\")([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})/",
'<a href="mailto:\\1" target=_blank>\\1</a>', $text);
return $text;
}
function replaceemail($text) {-
$ex = "/([a-zA-Z0-9._+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4})/";
preg_match_all($ex, $text, $url);
foreach($url[0] as $k=>$v) $text = str_replace($url[0][$k], '<a href="mailto:'.$url[0][$k].'" target="_blank" rel="nofollow">'.$url[0][$k].'</a>', $text);
return $text;
}