繁体   English   中英

使用正则表达式删除php中字符串中的空间

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM