【问题标题】:PHP Regex exact url match, change img srcPHP Regex 精确 url 匹配,更改 img src
【发布时间】:2011-10-28 22:14:40
【问题描述】:

我有一个 HTML 文档,标签中有一些图像。我想用不同的、在数组中定义的值来更改每个 img 源(src)。

当我运行以下代码时,我得到了

警告:preg_replace():第 9 行 /var/www/test.php 中的未知修饰符 '/' 警告:preg_replace():第 9 行 /var/www/test.php 中的未知修饰符 '/'

如何正确转义 url 字符串?

<?php
$body = "<img src=http://www.google.com/img1.jpg><br>"
      + "<img width=300 src=http://www.bbc.co.uk/img1.jpg>";

$changes = array();
$changes[] = array('from' => 'http://www.google.com/img1.jpg',
                     'to' => 'http://cnn.com/image2.jpg');
$changes[] = array('from' => 'http://www.bbc.co.uk/img1.jpg',
                     'to' => 'http://www.foo.bar.com/image2.jpg');

foreach ($changes as $change){
    $body = preg_replace('/<(img.*src)="'.$change['from'].'".*\/?>/',
                         '<\1="'.$change['to'].'">', $body)
            . PHP_EOL;
}
?>

【问题讨论】:

  • 在 / 之前添加一个 \ 以确保将其作为字符而不是控制字符来选择。
  • 您的“发件人”文本中有正斜杠 (/) - 它们需要转义。

标签: php regex url replace match


【解决方案1】:

试试这个:

http://php.net/manual/en/function.urlencode.php 用于编码网址。

但是,您似乎只是想替换 $body 中字符串的一部分,所以我会使用

http://php.net/manual/en/function.str-replace.php

而不是你的正则表达式。

<?php
$body = "<img src=http://www.google.com/img1.jpg><br><img width=300 src=http://www.bbc.co.uk/img1.jpg>";

$changes = array();
$changes[] = array('from' => 'http://www.google.com/img1.jpg', 'to'=> 'http://cnn.com/image2.jpg');
$changes[] = array('from' => 'http://www.bbc.co.uk/img1.jpg', 'to' => 'http://www.foo.bar.com/image2.jpg');

foreach ($changes as $change){
$body = str_replace($change['from'],$change['to'],$body);
}
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-05
    • 2016-02-18
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 2016-05-16
    相关资源
    最近更新 更多