2014-11-03 75 views
4

是否有反正使HTML净化器保留通常会在呈现的HTML中看到的隐含空间?HTML净化器保留空间

例如,你通常会期望在以下这些情况下FooBar之间的空间:

Foo<br/>Bar 

Example 1

<div>Foo</div><div>Bar</div> 

Example 2

回答

1

我有一个残酷的计划 - 更换任何标签关闭“>”空格并删除双空格

<?php 
$text = '<div>test</div><div>me</div>'; 

$text = preg_replace('/(<\/[a-z]+>)/', '$1 ', $text); 
$text = trim(preg_replace('/\s+/', ' ', strip_tags($text))); 

var_dump($text); 

返回

string(7) "test me" 
1

貌似HTMLPurifier不删除空白,它的删除标记都在一起,因为它不承认他们(这是奇怪)。

在问候Foo<br/>Bar

  • Error Line 1, Column 3: Unrecognized <br /> tag removed

在问候<div>Foo</div><div>Bar</div>

  • Error Line 1, Column 0: Unrecognized <div> tag removed
  • Error Line 1, Column 8: Unrecognized </div> tag removed
  • Error Line 1, Column 14: Unrecognized <div> tag removed
  • Error Line 1, Column 22: Unrecognized </div> tag removed

您可以通过在现场演示使CollectErrors看到这一点。

enter image description here

也许尝试允许div,并且brhttp://htmlpurifier.org/live/configdoc/plain.html#HTML.AllowedElements

下面是从Live Demo结果:

enter image description here

+0

我在谈论隐式空白,即从渲染的HTML输出中会有一个新行。我故意不允许这些标签。 – Petah 2014-11-10 03:00:44

+0

是的,基本上我所允许的是'strong,em,strike,b,i'等 – Petah 2014-11-10 03:32:55

+0

我明白了,所以你只允许造型HTML。如果有一个HTML标签,并且它被剥离,则没有隐含的空白或新行开头。在通过HTML Purifier发送它们之前,您需要用它们替换它们。 – EternalHour 2014-11-10 03:44:04