我正在使用旧的Joomla!插件(我知道,第一个错误)。它通过正则表达式进行一些URL替换。这是代码:
$row->text = preg_replace_callback('@href=("|\')(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)("|\')@', 'replace_links', $row->text);
问题是它打破了带有连字符的网址。有关如何修改它以接受连字符的任何帮助都会很棒。
它也可能是replace_links
函数中断:
function replace_links($matches) {
$match = $matches[0];
$array = array('href=',"'", '"');
$match = str_replace($array, '',$match);
if (strpos($match, JURI::root())) {
return $matches[0];
} else {
$plugin =& JPluginHelper::getPlugin('content', 'linkdisclaimer');
$pluginParams = new JParameter( $plugin->params );
$id = $pluginParams->get('disclaimerPage');
$match = "href=\"javascript:linkDisclaimer('".rawurlencode($match)."', '".$id."');\"";
return $match;
}
}
答案 0 :(得分:1)
我在一个正则表达式测试程序中尝试了这个并且它与url不匹配 - 在它们中,所以我猜它是正则表达式。尝试在正则表达式中添加 - 字符,如href=("|\')(https?://([-\w\.]+)+(:\d+)?(/([\w-/_\.]*(\?\S+)?)?)?)("|\')
。这应该允许 - 在域之后的路径段中。完全替换就像
$row->text = preg_replace_callback('@href=("|\')(https?://([-\w\.]+)+(:\d+)?(/([\w-/_\.]*(\?\S+)?)?)?)("|\')@', 'replace_links', $row->text);