为了账号安全,请及时绑定邮箱和手机立即绑定

如何删除内联样式中的空格?

如何删除内联样式中的空格?

PHP
哔哔one 2021-09-05 20:51:14
我有一个生成 html 电子邮件的 php 脚本。为了优化大小以不违反 Google 的 102kB 限制,我试图尽可能从代码中挤出不必要的字符。我目前使用Emogrifier来内联 css,然后使用TinyMinify进行缩小。来自此的输出在内联样式中的属性和值之间仍然有空格(例如style="color: #ffffff; font-weight: 16px")我开发了以下正则表达式来删除多余的空格,但它也会影响实际内容(例如,这个 & 变成了这个 & 那个)$out = preg_replace("/(;|:)\s([a-zA-Z0-9#])/", "$1$2", $newsletter);如何修改此正则表达式以仅限于内联样式,或者是否有更好的方法?
查看完整描述

2 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

没有防弹方法可以不匹配负载(style=""可以出现在任何地方)和不匹配实际 CSS 值(如 中所示content: 'a: b')。此外还要考虑

  • 缩短值:red短于#f00,短于#ff0000

  • 删除前导和尾随伪造,如空格和分号

  • 重新设计你的 HTML:即使用<ins><strong>可以有效地比使用内联 CSS 更短

一种方法是首先匹配所有内联样式的 HTML 属性,然后仅对它们的内容进行操作,但您必须自己测试它的效果如何:

$out= preg_replace_callback

( '/( style=")([^"]*)("[ >])/'  // Find all appropriate HTML attributes

, function( $aMatch ) {  // Per match

    // Kill any amount of any kind of spaces after colon or semicolon only

    $sInner= preg_replace

    ( '/([;:])\\s*([a-zA-Z0-9#])/'  // Escaping backslash in PHP string context

    , '$1$2'

    , $aMatch[2]  // Second sub match

    );


    // Kill any amount of leading and trailing semicolons and/or spaces

    $sInner= preg_replace

    ( array( '/^\\s*;*\\s*/', '/\\s*;*\\s*$/' )

    , ''

    , $sInner

    );


    return $aMatch[1]. $sInner. $aMatch[3];  // New HTML attribute

  }

, $newsletter

);


查看完整回答
反对 回复 2021-09-05
  • 2 回答
  • 0 关注
  • 143 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信