PHP正则表达式修改

时间:2012-02-16 20:48:27

标签: php regex joomla

我正在使用旧的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;  
    }
}

1 个答案:

答案 0 :(得分:1)

我在一个正则表达式测试程序中尝试了这个并且它与url不匹配 - 在它们中,所以我猜它是正则表达式。尝试在正则表达式中添加 - 字符,如href=("|\')(https?://([-\w\.]+)+(:\d+)?(/([\w-/_\.]*(\?\S+)?)?)?)("|\')。这应该允许 - 在域之后的路径段中。完全替换就像

$row->text = preg_replace_callback('@href=("|\')(https?://([-\w\.]+)+(:\d+)?(/([\w-/_\.]*(\?\S+)?)?)?)("|\')@', 'replace_links', $row->text);