I'm building emails from external variables of CSS and HTML and then combining them as inline styles. Before they are combined, however, I want to alter the CSS.
In the below, I want to remove the padding and margin from the body. How should I do this - preg_match or is there something "cleaner"?
$css = "body {
background: #fff;
color: #000;
padding: 0;
margin: 0;
font: 83%/1.4 verdana,sans-serif;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
}
a, a:link, a:visited, a:hover, a:active {
background: transparent;
text-decoration: none;
cursor: pointer;
}";
Also, it's well worth mentioning that I am getting the CSS (then inline-styling) like this with the below so maybe the DOMDocument can help me - that seems cleaner, but I don't know where to start.
use TijsVerkoyen\CssToInlineStyles\CssToInlineStyles;
$dom = new DOMDocument();
@$dom->loadHTML($row['htmlbody']); //from a database
$cssobj = $dom->getElementsByTagName('style');
$bodyobj = $dom->getElementsByTagName('body')->item(0);
$plainbody = new DOMDocument();
foreach ($bodyobj->childNodes as $child){
$plainbody->appendChild($plainbody->importNode($child, true));
}
$body = $plainbody->saveHTML();
$css = $cssobj->item(0)->nodeValue;
$cssToInlineStyles = new CssToInlineStyles();
$originalemail = $cssToInlineStyles->convert(
$body,
$css
);
If you know the exact text that you want to remove, you can use a str_replace()
from php. Example: $str_replace('margin:0;','',$css)
or
$str = preg_replace('/margin:(.*?);/', '', $css)