在PHP中,如何保留img标签的样式属性

时间:2015-11-20 10:47:08

标签: regex preg-replace

这是我的代码:

$pattern = '!<(img\s[^>]*?)>!is';
$html = '<img height="401" width="830" style="width:200px;height:150px" class="media-element file-default" typeof="Image" src="http://localhost.com/sites/default/files/sample_chart.png" alt="">';
$html = preg_replace_callback($pattern, 'custom_callback', $html);

在此代码中,如何保留img标签的样式属性

样式属性出现在任何带有img标记的地方。我想保留它。

1 个答案:

答案 0 :(得分:2)

怎么样?

正则表达式1 preg_replace("/(<img\s?)(.*)(style=\".*?\")(.*)(>)/i", "$1$2$3", $imageTag)

正则表达式2 preg_replace("/<img.*(style=\".*?\").*>/i", "<img $1>", $imageTag)

注意:我没有基准测试,但使用单个捕获组(第二个正则表达式)可能更有效。

在您的示例中<img height="401" width="830" style="width:200px;height:150px" class="media-element file-default" typeof="Image" src="http://localhost.com/sites/default/files/sample_chart.png" alt="">

两个正则表达式都返回<img style="width:200px;height:150px">

  1. 第1组:<img
  2. 未捕获:height="401" width="830"
  3. 第2组:style="width:200px;height:150px"(第二个正则表达式中的唯一组)
  4. 未捕获:class="media-element file-default" typeof="Image" src="http://localhost.com/sites/default/files/sample_chart.png" alt=""
  5. 第3组:>
  6. 解释正则表达式1

    1. (<img\s?):括号用于捕获组。匹配文字文本<img和可选(问号表示0或1次)空格\s
    2. .*:匹配任何字符(点)0或更多时间(星号)。
    3. (style=\".*?\"):括号用于捕获组。匹配文字文本style=\"。您需要转义引用,因为您将在PHP中的字符串中使用正则表达式。匹配任何字符(点)0或更多时间(星)尽可能少的时间(量词后面的问号)。由于星号(*)后跟一个问号(?),它会在到达第一个引用\"后立即停止捕捉字符。
    4. .*:匹配任何字符(点)0或更多时间(星号)。
    5. (>):结束时捕获组
    6. 替换$1$2$3替换捕获组1,2和3的文本并忽略其余部分

      解释正则表达式2

      1. <img.*:匹配文字文本<img和可选(问号表示0或1次)空格\s,后跟任何字符(星号)0或多次(明星)。
      2. 2. (style=\".*?\"):括号用于捕获组。匹配文字文本style=\"。您需要转义引用,因为您将在PHP中的字符串中使用正则表达式。匹配任何字符(点)0或更多时间(星)尽可能少的时间(量词后面的问号)。由于星号(*)后跟一个问号(?),它会在到达第一个引号\"后立即停止捕捉字符。

        1. .*>:尽可能多地匹配任何字符(点)(星号),直到到达标记的末尾(&gt;)。
        2. 替换<img $1>将文字替换为文字<img,后跟空格,即单个捕获和标记的结束符号。

          使用进行测试:https://www.functions-online.com/preg_replace.html

          成功