簡體   English   中英

如何從HTML標簽中剝離樣式屬性?

[英]How to strip Style Attributes from HTML Tags?

我想使用PHP從標記中刪除所有樣式。

例如。

原版的:

<body style="color:back;">

最后:

<body>

這是一個例子:

$body_htm='<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>[Some Title] some text...</title>
</head>
<body style="background-color: #F2F2F2; color: #222; font-family: georgia,serif; letter-spacing: -0.01em; line-height: 1.25; margin-bottom: 0.55em; font-size: 1.2em;">
<div style="background-color: #F2F2F2; border: 2px dotted #333; padding: 55px 0 55px 55px;">
<div style="background-color: #F2F2F2; width: 400px;">
<p style="margin-bottom:110px;"><b>Hello!!!</b></p>';

它應該返回以下內容:

<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>[Some Title] some text...</title>
</head>
<body>
<div>
<div>
<p><b>Hello!!!</b></p>';

有任何想法嗎?

一個非常簡單的替換可能會做到:

preg_replace( '/style=(["\'])[^\1]*?\1/i', '', $subject, -1 );

希望這可以幫助

如果您不能一開始就阻止style屬性的插入,建議您使用HTML Purifier之類的方法 這是針對此類問題的完善解決方案,並且還允許您將來以最少的精力執行更多的HTML過濾(例如XSS防護)。

可以通過使用正則表達式解決方案來創建問題,通常需要糾正越來越復雜的正則表達式,直到您自己本質上重新創建了諸如HTML Purifier之類的東西(並在此過程中迷失了頭腦)。 如果您收到無效的標記,則使用DOM擴展也會造成問題。 盡管HTML Purifier可能並非在所有方面都是完美的,但它將滿足您的需求並受到支持。

  1. 無法修改輸出,不包括樣式標簽(無論如何,內聯樣式都是不好的做法)?

  2. 是否可以包含您自己的CSS並使用!important規則覆蓋body屬性以修改您的輸出?

  3. 如果兩個問題都回答為“否”,則使用正則表達式或DOM / XML解析器將其刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM