2012-02-16 8 views
1

私は古いのJoomlaを使用しています!プラグイン(私は最初の間違いを知っています)。 regexを通していくつかのURL置換を行います。コードは次のとおりです。PHPの正規表現の修正

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

問題は、ハイフンを含むURLで壊れてしまうことです。ハイフンを受け入れるために私がどのように変更できるかについての助けは素晴らしいでしょう。

また壊れる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

を私は正規表現テスターでこれを試してみましたが、それはしたURLと一致していません - 彼らに、私はそれは正規表現だ推測しています。そうhref=("|\')(https?://([-\w\.]+)+(:\d+)?(/([\w-/_\.]*(\?\S+)?)?)?)("|\')のような正規表現に文字 - 追加してみてください。これは、ドメインの後のパスセグメントで可能になります。完全な置き換えは

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

感謝するようなものです。魅力のように働いた。 – mcd