我想通过php中的正则表达式删除html标记之间的空格。我可以知道规则是什么吗?不删除文本中的空格。
例如,我想删除<tr>
和<td>
标记之间的空格。
自:
<tr>
<td>Hello there</td>
<tr>
为:
<tr><td>Hello there</td></tr>
感谢。
答案 0 :(得分:2)
首先关闭:markup (HTML) and regex don't mix well。尽管如此,你可以删除标签之间的空格,并且很容易使用以下正则表达式:
$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
是标记的根节点。有关示例和详细信息,请参阅the docs
如果您拥有的字符串是您在问题中包含的内容,则需要删除所有空格。在这种情况下,正则表达式只是不必要:
$string = '<tr>
<td>';
echo str_replace(' ', '', $string);//removes all spaces...
好吧,浏览DOMDocument
课程的文件,值得付出努力。诚实:)
答案 1 :(得分:1)
这个问题比它看起来更复杂。删除所有标记之间的所有空格很容易,例如
<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可能有用)。< / p>
绝对不是你能用正则表达式实现的东西!
答案 2 :(得分:0)
$str = "<td> </td>";
$str2 = "<td></td>";
var_dump(preg_match('/\s/',$str));
var_dump(preg_match('/\s/',$str2));
结果1返回true
结果2返回false