[英]Remove space in string in php with regular expression
我想通過php中的正則表達式刪除html標記之間的空間。 我可以知道這是什么規則嗎? 不刪除文本中的空格。
例如,我想特別刪除<tr>
和<td>
標記之間的空格。
從:
<tr>
<td>Hello there</td>
<tr>
至:
<tr><td>Hello there</td></tr>
謝謝。
首先, 標記(HTML)和正則表達式混合不好 。 盡管如此,您可以使用以下正則表達式輕松刪除標簽之間的空格:
$clean = preg_replace('/>\s+</', '><', $string);
如果標簽之間沒有其他內容,則會刪除在標簽之間找到的空格:
<p>Foobar <b>is</b> not a word <i>as such</i> <p>
將被“翻譯”為:
<p>Foobar <b>is</b> not a word <i>as such</i><p>
很好,但是使用DOMDocument
類分析,清理然后回顯標記會更好(更安全)。 但是在您開始黑客攻擊並編寫數千行代碼以確保您正在處理有效的標記之前,請問自己一個簡單的問題:
與其編寫可解決不良標記的代碼,不如從一開始就研究確保您要處理的數據具有高質量的方法。
無論如何,這是一個有關如何使用DOMDocument
類的簡單示例:
$dom = new DOMDocument;
$dom->loadHTML($string);
echo $dom->saveHTML();//echoes sanitized markup
假設$string
是完整的DOM(包括<html>
,doctype和所有其他暗含的標記)。 如果沒有這樣的字符串,則必須使用saveXML
:
echo $dom->getElementsByTagName('body')->item(0)->saveXML();
其中body
是標記的根節點。 請參閱文檔以獲取示例和詳細信息
如果您的字符串是問題中包含的字符串,則需要刪除所有空格。 在這種情況下,正則表達式是沒有必要的 :
$string = '<tr>
<td>';
echo str_replace(' ', '', $string);//removes all spaces...
嗯,瀏覽DOMDocument
類的文檔是值得的。 誠實 :)
這個問題比看起來要復雜。 刪除所有標簽之間的所有空格很容易,例如
<tr> <td> -> <tr><td>
但是這種幼稚的方法會產生錯誤的結果:
<i>hi</i> <b>there</b> -> <i>hi</i><b>there</b>
要正確刪除空格,您必須分析其父節點的類型,並且僅在該節點不允許文本內容時才刪除( http://www.w3.org/TR/html4/sgml/dtd.html可能會有幫助) 。
絕對不是用正則表達式可以實現的!
$str = "<td> </td>";
$str2 = "<td></td>";
var_dump(preg_match('/\s/',$str));
var_dump(preg_match('/\s/',$str2));
結果1返回true
結果2返回假
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.