【问题标题】:Remove whitespace in <td> but only outside of <span> elements [duplicate]删除 <td> 中的空格,但仅在 <span> 元素之外[重复]
【发布时间】:2018-03-18 09:05:28
【问题描述】:

我想删除 &lt;td&gt; 元素中的空格。 在这个元素中,我有几个 &lt;span&gt; 元素,它们之间是不必要的空格。有没有办法在不删除 &lt;span&gt; 元素内的空格的情况下删除它们?

我无法在代码中删除它们,我必须通过使用 css 或更改 PHP 输出来处理它们。

我有以下想法,但它(当然)删除了所有空格:

echo str_replace(' ', '', $total['value']);

我也尝试了 CSS 方法:

white-space: pre-line

但这会在每个空格前添加一行...

还有其他想法吗?

编辑: 这就是我所拥有的:

<td class="totals totals_amount_order_total">
                                <span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">€</span>&nbsp;636,17</span>
                                <br class="wgm-break">
                                <span class="wgm-tax includes_tax">Enthält<span class="amount"><span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">€</span>&nbsp;101,57</span></span> MwSt. (19%)</span>
                          </td>

我现在想删除标签之间的所有空格(但不是标签内的文本):

<td class="totals totals_amount_order_total"><span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">€</span>&nbsp;636,17</span><br class="wgm-break"><span class="wgm-tax includes_tax">Enthält<span class="amount"><span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">€</span>&nbsp;101,57</span</span> MwSt. (19%)</span></td>

编辑 2: 我试图用它们之前的空格替换所有&lt;span&gt; 标签。我尝试使用preg_replace 执行此操作,但我不确定如何为跨度内的不同类设置通配符

【问题讨论】:

  • 这是为了美化你的最终输出吗?
  • 发布示例输入、所需输出、您通过试验获得的输出,然后我们可以提供帮助。
  • 我已经更新了我的问题。希望有帮助

标签: php html css whitespace


【解决方案1】:
$new = preg_replace('/>\s*</','><',$orig);

为我工作!从您的示例输入和输出中,我注意到您只删除了标签之间的空格。

我的测试的完整代码:

    $orig="<td class=\"totals totals_amount_order_total\">
                            <span class=\"woocommerce-Price-amount amount\"><span class=\"woocommerce-Price-currencySymbol\">€</span>&nbsp;636,17</span>
                            <br class=\"wgm-break\">
                            <span class=\"wgm-tax includes_tax\">Enthält<span class=\"amount\"><span class=\"woocommerce-Price-amount amount\"><span class=\"woocommerce-Price-currencySymbol\">€</span>&nbsp;101,57</span></span> MwSt. (19%)</span>
                      </td>";

    $new = preg_replace('/>\s*</','><',$orig);
    print($new);

我明白了(查看源代码):

 <td class="totals totals_amount_order_total"><span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">€</span>&nbsp;636,17</span><br class="wgm-break"><span class="wgm-tax includes_tax">Enthält<span class="amount"><span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">€</span>&nbsp;101,57</span></span> MwSt. (19%)</span></td>

【讨论】:

  • 谢谢,我也有同样的想法。但我试过了,它不起作用。空格仍然存在。
  • 日志、错误、...?我刚刚在我的 PHP 上做了,工作正常。
  • 抱歉,没有显示错误。它正在替换数据。我可以看到,因为我在替换中添加了一些东西。但空间仍然存在
  • @Cray 请注意,如果您使用浏览器进行检查,您的浏览器本身可能会添加空格以提高可读性。因此建议在&lt;pre&gt; 标签内输出(或检查其他形式的原始输出格式)
  • 我觉得奇怪的是您的示例输出与我的输出匹配,但这不是您想要的。退出。