2014-11-03 72 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