php将文本插入到href中

时间:2011-06-20 13:24:27

标签: php regex .htaccess

我正在使用htmlpurifier来创建我的网站的纯文本版本。 我现在需要用仅文本网址替换所有href,即'www.example.com/aboutus'变为'www.example.com/text/aboutus'

最初我在域上尝试了一个简单的str_replace(我为域使用了一个全局变量),但问题是文件的链接也被替换,即 'www.example.com/document.pdf'变为'www.example.com/text/document.pdf',因此失败。

是否有正则表达式,我可以说用域/文本替换域,其中url不包含字符串?

感谢您提供给我的任何指示:)

1 个答案:

答案 0 :(得分:1)

使用negative lookahead

$output = preg_replace(
             '#www.example.com(?!/text/)#', 
             'www.example.com/text', 
             $input
          );

更好的是,使用DOM

$html = '<a href="www.example.com/something">foo</a>
         <p>hello</p>
         <a href="www.example.com/text/documents">bar</a>';

libxml_use_internal_errors(true); // supresses DOM errors

$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);

$hrefs = $xpath->query('//a/@href');
foreach ($hrefs as $href) {
    $href->value = preg_replace(
                      '#^www.example.com(?!/text/)(.*?)(?<!\.pdf)$#', 
                      'www.example.com/text\\1', 
                      $href->value
                   );
}

这应该给你:

<a href="www.example.com/text/something">foo</a>
<p>hello</p>
<a href="www.example.com/text/documents">bar</a>