PHP函数有条件地替换html中的url

时间:2010-10-02 19:41:02

标签: php regex

所以,我正在尝试创建一个执行以下操作的函数:

  • 以字符串
  • 接收HTML
  • 查找文件路径(在SRC =属性中)
  • 仅替换以域example.com开头的图片网址
  • 仅替换图片(jpg,jpeg,gif,png)
  • 用example2.com替换图像的域名
  • 返回替换了图片网址的HTML。

有一种优雅的方式吗?我一直在努力创造一个正则表达来照顾我,并且到目前为止只遇到了史诗般的失败。

任何帮助非常感谢。

2 个答案:

答案 0 :(得分:2)

首先,不要使用正则表达式来解析HTML ...

这是使用XPath和DomDocument的基本示例:

$dom = new DomDocument();
$dom->loadHtml($html);
$xpath = new DomXpath($dom);

$query = '//img[contains(@src, "example.com")]';
$imgs = $xpath->query($query);

foreach ($imgs as $img) {
    $src = $img->getAttribute('src');
    $parts = explode('.', $src);
    $extension = strtolower(end($parts));
    if (in_array($extension, array('jpg', 'jpeg', 'gif', 'png'))) {
        $src = str_replace('example.com', 'example2.com', $src);
        $img->setAttribute('src', $src);
    }
}

$html = $dom->saveHtml(); 

答案 1 :(得分:1)

PHP Simple HTML DOM Parser可以解决这个问题。