Php 如何删除&;nbsp;从标签内部,在字符串内部

Php 如何删除&;nbsp;从标签内部,在字符串内部,php,html,mysql,Php,Html,Mysql,我正在输出一个由WYSIWYG编辑器创建的巨大字符串。下面是编辑器生成的输出示例。我试图从开头和结尾(在每个标记内)防止创建的所有空格,以便标记紧密地包装内容。Rtrim和Ltrim不起作用,因为它们修剪整个字符串,而不是其中的标签 下面是一个字符串示例 <div>&nbsp; &nbsp; &nbsp; Small&nbsp;amount of text, should be&nbsp;alot.</div> <div>

我正在输出一个由WYSIWYG编辑器创建的巨大字符串。下面是编辑器生成的输出示例。我试图从开头和结尾(在每个标记内)防止
创建的所有空格,以便标记紧密地包装内容。Rtrim和Ltrim不起作用,因为它们修剪整个字符串,而不是其中的标签

下面是一个字符串示例

<div>&nbsp; &nbsp; &nbsp; Small&nbsp;amount of text, should be&nbsp;alot.</div>
<div>Small&nbsp;amount of text, should be&nbsp;alot. &nbsp; &nbsp; &nbsp; </div>
少量文本,应该很多。
少量的文字,应该是大量的。
这将沿以下几行输出一些内容(div已保留在中以显示空格的范围,但在输出时将被隐藏)

少量文本,应该很多。
少量的文字,应该是大量的。
我更喜欢这个输出

<div>Small amount of text, should be alot.</div>
<div>Small amount of text, should be alot.</div>
少量文本,应该很多。
少量的文字,应该是大量的。

如何实现这一点?

将重复空格和/或
替换为单个

preg_replace('/(?:&nbsp;| ){2,}/', '&nbsp;', $string);
如果要将所有
转换为空格,然后折叠空格,请执行以下操作:

preg_replace('/ {2,}/', ' ', str_replace('&nbsp;', ' ', $string));
请注意,这不会从开始标记之后或结束标记之前删除单个空格。对于这样的情况,正则表达式正进入一个非常棘手的领域,您将希望使用DOM或XML来解析文档


但是,在HTML中,前导空格和尾随空格通常是无关紧要的,因此这应该可以帮助您了解问题所在。

为什么不尝试替换字符串

$newStr = str_replace("&nbsp;", "", $oldStr);

我假设您的最终目标是:

  • 替换为“”
  • 压缩空格
  • 移除标签内的尾随和前导白字
  • 您可以通过以下方式实现这一目标:

    //1 replace hard spaces with spaces
    $text = str_replace('&nbsp;', ' ', $text);
    //2 squeeze spaces
    $text = preg_replace('/\s+/', ' ', $text);
    //replace "> " & " <" with ">" & "<" respectively
    $result = str_replace(array('> ', ' <'), array('>', '<'), $text);
    
    //1用空格替换硬空格
    $text=str_替换(“”,,$text);
    //2压缩空间
    $text=preg_replace('/\s+/',''$text);
    
    //替换“>”&“&”给出字符串和所需转换的示例。最好的方法是使用SimpleXML或DOMDocument等解析文档,修剪标记的内容,然后重新组装文档。您希望避免在此处使用正则表达式!!!(一定会有人建议)你还想删除吗?@AbraCadaver当然需要一秒钟。字符串是“代码片段”,但我会让它更明显。这是我的观点。不是空白。当呈现为HTML时它显示为空白。scrowler通过评论回复说正则表达式是个坏主意?@user2950370,哪些HTML标记将被输出(都是允许的)?@user2950370大多数情况下,是的。当你发表评论时,我只是在写一个编辑。只要你只对折叠空白感兴趣,正则表达式就可以了。如果你需要明确处理“标记内的某些内容
    “那么你应该看看DOM/XML了。@user2950370这个例子没问题,他不是在分析实际的代码,而是在整理重复的
    sMy对空格vs的理解有点混淆。您的第二个代码片段工作得非常出色。谢谢谢谢你的编辑。Stackoverflow Android应用程序在动态编写代码时毫无用处。
    //1 replace hard spaces with spaces
    $text = str_replace('&nbsp;', ' ', $text);
    //2 squeeze spaces
    $text = preg_replace('/\s+/', ' ', $text);
    //replace "> " & " <" with ">" & "<" respectively
    $result = str_replace(array('> ', ' <'), array('>', '<'), $text);