我正在顯示已寫入wysiwyg編輯器(未使用外部css)的內容(名爲$ ps的字符串填充爲html),幷包含空白空間,如php刪除不包圍內容的html標記
<p>
<span style="font-family: Calibri, sans-serif; font-size: 11pt;">
<br></br>
</span>
<span style="font-size: 11pt; font-family: Calibri, sans-serif;">
</span>
</p>
我想刪除使用PHP(因爲我希望作者繼續不小心添加空的東西)。
到目前爲止,我有這非常低效代碼:
$ps = preg_replace('#class="(.*?)"#', '',$ps);
$ps = preg_replace('#style="(.*?)"#', '',$ps);
$ps = preg_replace('#<br\s*/*>#i', '',$ps);
$ps = preg_replace('#<span\s*/*>#i', '',$ps);
$ps = preg_replace('#<p>\s*</p>#i', '',$ps);
大約是一半好,讓我:
<p>
</p>
<p>
</p>
,我懷疑,如果它不會可靠地工作空的東西看起來有點不同。
你能幫我建立一個更好的解決方案,我可以輕鬆實現嗎?也許一個正則表達式的工作,不像我到目前爲止的嘗試..
謝謝!
第一件事情首先(不管這是否是一個好的方法來做到這一點)preg_replace可以採取一個正則表達式的數組。即:'preg_replace(array#'#class =「(。*?)」#','#style =「(。*?)」#','#
#i','# #i',' #
\ s *
#i'),'',$ ps);' – 2014-09-12 16:07:08我想你應該使用[DOMXPath](http://docs.php.net/DOMXPath)刪除空的節點。正則表達式對HTML不好。檢查這2個SO解決方案。 http://stackoverflow.com/questions/8603237/remove-empty-tags-from-a-xml-with-php和http://stackoverflow.com/questions/11744454/xpath-to-recursively-remove-empty- dom-node – bansi 2014-09-12 16:12:49
用正則表達式解析HTML是悲傷的祕訣。當您的用戶輸入與您的期望不符時,您的正則表達式將會中斷。例如,如果您的''
'標籤位於不同的行上?用正則表達式修改HTML更糟糕。使用合適的HTML解析器。 – 2014-09-12 16:19:59