2014-02-18 66 views
-1

使用PHP和正則表達式,如何從標籤中去除所有不需要的樣式,類或其他垃圾?從指定的html標籤中刪除類/樣式/垃圾

EG:

<span class="blah" style="blah" any other junk >...</span> 

將被清洗,這一點:<span>...</span>

我試圖把一個函數像這樣:

function cleanTag($html, $tagType='div'){ 
    $html = // regex to clean out all tags of $tagType in $html 
    return $html; 
} 

我想這對我設置爲$tagType任何標籤類型的工作。

需要在PHP中 - 我在做服務器端。謝謝。

+0

其他可能的重複項:https://stackoverflow.com/questions/4179206或https://stackoverflow.com/questions/12104962或https://stackoverflow.com/questions/6371527 。還可以查看更多相關部分。 – Gordon

回答

1

如果你只是想針對你需要動態調整正則表達式,請務必使用preg_quote,以避免讓在$tagType參數正則表達式匹配特定的標記。

以下函數將使用比先前答案更嚴格的標籤限制,例如,在功能代碼後嘗試測試。

function cleanTag($html, $tagType = 'div') { 
    if ($tagType) { 
     // match specific tag 
     $tagType = preg_quote($tagType); 
    } else { 
     // match all tags 
     $tagType = '[\w\d]+'; 
    } 

    return preg_replace("/<\s*($tagType).*?>/si", '<$1>', $html); 
} 

http://phpfiddle.org/main/code/9q7-bnr

文本說明:

  • /
  • <匹配開括號
  • \s*匹配零個或多個空格字符(空格,製表,換行)
  • ([\w\d]+)/($tagType)捕獲的字母數字/明確的標籤名
  • .*?>匹配零個或多個字符,直到結束標記發現
  • /si點字符相匹配的新線和大小寫的比較

的字符串替換整個匹配包含捕獲標籤的新標籤$1