我有一个处理数据并提取链接,电子邮件和主题标签的类,我遇到的问题是当我多次调用该类时,它会出现错误Fatal error: Cannot redeclare replaceurl() (previously declared in C:\wamp\www\ln.php:13)
这是班级
class HtmlLinkUtility
{
public static $BaseDomain = null;
public static function ReplaceEmailToHtmlLink($source)
{
return preg_replace('/([_.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})/i',
'<a href="mailto:\1">\1</a>', $source);
}
public static function ReplaceUrlToHtmlLink($source)
{
function replaceUrl($groups) {
$url = $groups[1];
return '<a href="' . $url . '"' . (strpos($url, HtmlLinkUtility::$BaseDomain) !== false ?
' target="_blank"' : '') . '>' . $url . '</a>';
}
return preg_replace_callback('!(((f|ht){1}(tp://|tps)|(www.))[-a-zA-Z0-9@:%_+.~#?&//=]+)!i',
replaceUrl, $source);
}
public static function Htags($source){
$regex = "/#+([a-zA-Z0-9_]+)/";
$source = preg_replace($regex, '<a href="tag.php?tag=$1">$0</a>', $source);
return $source;
}
public static function ReplaceTextDataToLinks($source, $baseDomain)
{
self::$BaseDomain = $baseDomain;
return self::Htags(self::ReplaceUrlToHtmlLink(self::ReplaceEmailToHtmlLink($source)));
}
}
echo HtmlLinkUtility::ReplaceTextDataToLinks("test@test.com<br />http://www.google.com/<br />http://www.test.com/ #madekir", "ivotism.com");
echo HtmlLinkUtility::ReplaceTextDataToLinks("test@test.com<br />http://www.google.com/<br />http://www.test.com/ #madekir", "ivotism.com");
echo HtmlLinkUtility::ReplaceTextDataToLinks("test@test.com<br />http://www.google.com/<br />http://www.test.com/ #madekir", "ivotism.com");
第一个echo
工作正常,第二个和第三个不会,它产生上面的错误,请有人帮帮我,什么错?
答案 0 :(得分:1)
您可能想要使用匿名函数。 将代码切换到:
public static function ReplaceUrlToHtmlLink($source)
{
return preg_replace_callback('!(((f|ht){1}(tp://|tps)|(www.))[-a-zA-Z0-9@:%_+.~#?&//=]+)!i', function ($groups) {
$url = $groups[1];
return '<a href="' . $url . '"' . (strpos($url, HtmlLinkUtility::$BaseDomain) !== false ?' target="_blank"' : '') . '>' . $url . '</a>';
}, $source);
}
答案 1 :(得分:0)
这就是我最终实现它的方式。
public static function ReplaceUrlToHtmlLink($source)
{
if (!function_exists("replaceUrl")){
function replaceUrl($groups) {
$url = $groups[1];
return '<a href="' . $url . '"' . (strpos($url, HtmlLinkUtility::$BaseDomain) !== false ?
' target="_blank"' : '') . '>' . $url . '</a>';
}
}
return preg_replace_callback('!(((f|ht){1}(tp://|tps)|(www.))[-a-zA-Z0-9@:%_+.~#?&//=]+)!i',
replaceUrl, $source);
}