Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP函数有条件地替换html中的URL_Php_Regex - Fatal编程技术网

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

PHP函数有条件地替换html中的URL,php,regex,Php,Regex,因此,我尝试创建一个函数,它执行以下操作: 接收字符串形式的HTML 查找文件路径(在SRC=attributes中) 仅替换以domain example.com开头的图像URL 仅替换图像(jpg、jpeg、gif、png) 将映像的域替换为example2.com 返回替换了图像URL的HTML 有没有一种优雅的方法?我一直在努力创建一个正则表达式来处理它,到目前为止,我只遇到过epic fail 非常感谢您的帮助 应该这样做。应该这样做。首先,不要使用正则表达式解析HTML 下面是一

因此,我尝试创建一个函数,它执行以下操作:

  • 接收字符串形式的HTML
  • 查找文件路径(在SRC=attributes中)
  • 仅替换以domain example.com开头的图像URL
  • 仅替换图像(jpg、jpeg、gif、png)
  • 将映像的域替换为example2.com
  • 返回替换了图像URL的HTML
有没有一种优雅的方法?我一直在努力创建一个正则表达式来处理它,到目前为止,我只遇到过epic fail


非常感谢您的帮助

应该这样做。

应该这样做。

首先,不要使用正则表达式解析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(); 

首先,不要使用正则表达式来解析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(); 

那个刚刚打开了一个全新的世界。谢谢你,我现在就去试一试!那个刚刚打开了一个全新的世界。谢谢你,我现在就去试一试!我觉得马克塞尔的评论更全面;但是简单的HTMLDOM解析器是以一种对我来说更容易使用的方式记录的。非常感谢。我觉得马克塞尔的评论更全面;但是简单的HTMLDOM解析器是以一种对我来说更容易使用的方式记录的。非常感谢。