将元素添加到提取的样式表中的每个CSS规则中(以字符串形式)

ddrv8njm  于 2023-11-19  发布在  其他
关注(0)|答案(2)|浏览(104)

我想改变每一个CSS规则在一个字符串whitch我从HTML电子邮件体提取。字符串包含CSS内的一个元素whitch影响我的网站样式。
我想在字符串中的每个css规则中添加一个元素(div类),这在php中可能吗?
范例:

$string = '<style type="text/css">body { blah blah } .div1 { blah blah } .div2 { blah blah }</style> Blah blah blah body text blah blah';

$extractcss = strip_tags($string , '<style>');

字符串
我想把.mydiv添加到每一个css规则中来得到这个:

$extractcss = '.mydiv body { blah blah } .mydiv .div1 { blah blah } .mydiv .div2 { blah blah }';


使用新的字符串,我想影响电子邮件正文的样式,以便它不再对我的网站样式有任何影响。
提前感谢!

gcmastyq

gcmastyq1#

this topic的帮助下,我有了解决问题的方法。
使用下面的函数,我从一个字符串中解析CSS。之后,我在每个css规则前面创建一个新的css字符串和一个div类。

function parse_css($cssstring){
                            preg_match_all( '/(?ims)([a-z0-9\s\.\:#_\-@,]+)\{([^\}]*)\}/', $cssstring, $arr);
                            $result = array();
                            foreach ($arr[0] as $i => $x){
                                $selector = trim($arr[1][$i]);
                                $rules = explode(';', trim($arr[2][$i]));
                                $rules_arr = array();
                                foreach ($rules as $strRule){
                                    if (!empty($strRule)){
                                        $rule = explode(":", $strRule);
                                        $rules_arr[trim($rule[0])] = trim($rule[1]);
                                    }
                                }
                                
                                $selectors = explode(',', trim($selector));
                                foreach ($selectors as $strSel){
                                    $result[$strSel] = $rules_arr;
                                }
                            }
                            return $result;
                        }

// Extract and change css style
                        if ( str_contains($message, '<style') ) { 
                        
                            $extractcss = strip_tags($message, '<style>');
                            $parsecss = parse_css($extractcss);
                            $newcssstring = '<style type="text/css">';
                        
                            foreach ( $parsecss as $key => $value ) {
                                $newcssstring .= '.message-body '. $key .' { ';
                                    
                                    foreach ( $value as $k => $v ) {
                                        $newcssstring .= $k .': '. $v .'; ';
                                    }

                                $newcssstring .= ' } ';
                            }
                            $newcssstring .= '</style>';

                            $message = preg_replace("#([<]style)(.*)([<]/style[>])#s", "<!-- style extracted -->", $message);

                            $message= $newcssstring . $message;

                        }

字符串

a8jjtwal

a8jjtwal2#

代码有一些错误,无论如何最简单的方法是使用str_replace() php函数

$newstring=str_replace("{",".mydiv {",$string);

字符串

相关问题