如何从字符串内部的标签中删除

时间:2014-02-24 20:40:26

标签: php html mysql

我正在输出一个由WYSIWYG编辑器创建的巨大字符串。以下是编辑器输出的示例。我试图阻止&nbsp的所有空间从开头和结尾(在每个标签内),以便标签紧紧包裹内容。 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>

我更喜欢这个输出..

<div>Small amount of text, should be alot.</div>
<div>Small amount of text, should be alot.</div>

如何实现这一目标?

3 个答案:

答案 0 :(得分:1)

将空格和/或&nbsp;的重复替换为单个&nbsp

preg_replace('/(?:&nbsp;| ){2,}/', '&nbsp;', $string);

如果要将所有&nbsp;转换为空格,然后折叠空格:

preg_replace('/ {2,}/', ' ', str_replace('&nbsp;', ' ', $string));

请注意,这不会从开始标记之后或结束标记之前删除单个空格。对于类似的东西,你正在使用正则表达式进入一个非常讨厌的领域,你将需要使用DOM或XML来解析文档。

但是,HTML中的前导和尾随空格通常是无关紧要的,所以这应该可以让你到达目的地。

答案 1 :(得分:0)

为什么不尝试更换字符串?

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

答案 2 :(得分:0)

我认为你的最终目标是:

  1. &nbsp;替换为“”
  2. 挤压空白
  3. 删除标记内的尾随和引导白名
  4. 你可以通过以下方式实现这一目标:

    //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);