如何在 CSS 中查找和删除正文选择器
How do I find and remove body selectors in CSS
我正在研究 PHP 以在样式标签下找到 body
选择器。我想搜索样式标签中的每个 body
选择器以删除它们,以防止它们更改我的 html 中的正文,尤其是 background-color
、font-family
等
这里是 html:
<style type="text/css">
/*GENERAL*/
table{width:100%}
body{background-color:#ebebeb; width: 100%; margin:0; padding:0; -webkit-font-smoothing: antialiased;font-family: "Segoe UI",SegoeUI,"Helvetica Neue",Helvetica,sans serif; -webkit-text-size-adjust: 100%;}
div.ms-article-container #emailbodyouter .emailbodyinner section{margin:0}
div.ms-article-container #emailbodyouter .emailbodyinner table div {margin:0}
div.content-article #emailbodyouter .emailbodyinner section{margin:0}
div.content-article #emailbodyouter .emailbodyinner table div {margin:0}
</style>
这是另一个:
<style type="text/css"> body {position: relative; font-family: Segoe UI; font-size: 12px; } .pageHeader {color: #9C9C9C; font-size: 160%; padding: 0px 0px 6px 0px} .pageHeaderLogo {padding-right: 15px;} .pageHeaderTitle{border-left: 1px solid #CCCCCC; padding: 5px;} .pageFooter {width: 100%; background-color: #f2f2f2; font-size: 12px; font-family: Segoe UI; padding:4px 4px 4px 4px; } .pageFooterLogo {text-align:right; width:100%} .padCells { padding: 0px 6px 0px 0px; } .preHeader {display: none !important; visibility:hidden; opacity:0; color:transparent; height:0; width:0; }</style>
这是我想要实现的目标:
<style type="text/css">
/*GENERAL*/
table{width:100%}
div.ms-article-container #emailbodyouter .emailbodyinner section{margin:0}
div.ms-article-container #emailbodyouter .emailbodyinner table div {margin:0}
div.content-article #emailbodyouter .emailbodyinner section{margin:0}
div.content-article #emailbodyouter .emailbodyinner table div {margin:0}
</style>
这是现有代码,但这完全删除了样式标签:
$doc = new DOMDocument();
$doc->loadHTML($inbox_message);
$xpath = new DOMXpath($doc);
$styles = $xpath->query('//style[@type="text/css"]');
if ($styles) {
foreach ($styles as $style) {
$style->parentNode->removeChild($style);
}
}
我只想找到每个样式标签中的 body {
和 body{
将其删除。
能否举例说明如何在每个样式标签中搜索 body
选择器以将其删除?
谢谢。
您可以使用 preg_replace
从 style
标签中查找和删除任何 body { ... }
元素:
$doc = new DOMDocument();
$doc->loadHTML($inbox_message);
$xpath = new DOMXpath($doc);
$styles = $xpath->query('//style[@type="text/css"]');
if ($styles) {
foreach ($styles as $style) {
$style->nodeValue = preg_replace('/\bbody\s*\{[^}]+}/', '', $style->nodeValue);
}
}
$inbox_message = $doc->saveHTML();
我正在研究 PHP 以在样式标签下找到 body
选择器。我想搜索样式标签中的每个 body
选择器以删除它们,以防止它们更改我的 html 中的正文,尤其是 background-color
、font-family
等
这里是 html:
<style type="text/css">
/*GENERAL*/
table{width:100%}
body{background-color:#ebebeb; width: 100%; margin:0; padding:0; -webkit-font-smoothing: antialiased;font-family: "Segoe UI",SegoeUI,"Helvetica Neue",Helvetica,sans serif; -webkit-text-size-adjust: 100%;}
div.ms-article-container #emailbodyouter .emailbodyinner section{margin:0}
div.ms-article-container #emailbodyouter .emailbodyinner table div {margin:0}
div.content-article #emailbodyouter .emailbodyinner section{margin:0}
div.content-article #emailbodyouter .emailbodyinner table div {margin:0}
</style>
这是另一个:
<style type="text/css"> body {position: relative; font-family: Segoe UI; font-size: 12px; } .pageHeader {color: #9C9C9C; font-size: 160%; padding: 0px 0px 6px 0px} .pageHeaderLogo {padding-right: 15px;} .pageHeaderTitle{border-left: 1px solid #CCCCCC; padding: 5px;} .pageFooter {width: 100%; background-color: #f2f2f2; font-size: 12px; font-family: Segoe UI; padding:4px 4px 4px 4px; } .pageFooterLogo {text-align:right; width:100%} .padCells { padding: 0px 6px 0px 0px; } .preHeader {display: none !important; visibility:hidden; opacity:0; color:transparent; height:0; width:0; }</style>
这是我想要实现的目标:
<style type="text/css">
/*GENERAL*/
table{width:100%}
div.ms-article-container #emailbodyouter .emailbodyinner section{margin:0}
div.ms-article-container #emailbodyouter .emailbodyinner table div {margin:0}
div.content-article #emailbodyouter .emailbodyinner section{margin:0}
div.content-article #emailbodyouter .emailbodyinner table div {margin:0}
</style>
这是现有代码,但这完全删除了样式标签:
$doc = new DOMDocument();
$doc->loadHTML($inbox_message);
$xpath = new DOMXpath($doc);
$styles = $xpath->query('//style[@type="text/css"]');
if ($styles) {
foreach ($styles as $style) {
$style->parentNode->removeChild($style);
}
}
我只想找到每个样式标签中的 body {
和 body{
将其删除。
能否举例说明如何在每个样式标签中搜索 body
选择器以将其删除?
谢谢。
您可以使用 preg_replace
从 style
标签中查找和删除任何 body { ... }
元素:
$doc = new DOMDocument();
$doc->loadHTML($inbox_message);
$xpath = new DOMXpath($doc);
$styles = $xpath->query('//style[@type="text/css"]');
if ($styles) {
foreach ($styles as $style) {
$style->nodeValue = preg_replace('/\bbody\s*\{[^}]+}/', '', $style->nodeValue);
}
}
$inbox_message = $doc->saveHTML();