2017-07-11 62 views
0

我希望您能像往常一樣幫助您,謝謝。如何在應用htmlspecialchars後替換html換行符

我有一個表格在一個文本輸入的信息,我讓用戶寫html標籤,因爲有時他們會想literaly寫html標籤,因此,如果他們寫這樣的事情作爲輸入:

<h1>This is the input content</h1> 
I like Pizza 
I like Cheese 
This is the end of the input, as you see I pressed enter several times 

我節省使用nl2br輸入,這樣的事情:

$textForDataBase = nl2br($_POST['input']); 

那麼數據庫值是這樣的:

<h1>This is the input content</h1> 
I like Pizza<br />I like Cheese<br />This is the end of the input, as you see I pressed enter several times 

然後,在顯示內容之前,我將htmlspecialchars應用於我的字符串,但我希望所有不是斷行的html標記都轉換爲html實體,所以我嘗試使用preg_replace,但我沒有運氣,我該怎麼辦?

$html = htmlspecialchars($val['descripcion']); 
echo preg_replace('#<br\s*/?>#i', "\n", $html); 

如果我不使用用htmlspecialchars輸出會是這樣的:

這是輸入內容

我喜歡比薩
我喜歡奶酪
這是輸入的結束,正如你看到的我按下Enter鍵數次

但是,如果使用它:

<h1>This is the input content</h1> 
I like Pizza<br />I like Cheese<br />This is the end of the input, as you see I pressed enter several times 

預期輸出爲:

<h1>This is the input content</h1> 
I like Pizza 
I like Cheese 
This is the end of the input, as you see I pressed enter several times 
+0

看看這個https://stackoverflow.com/questions/4114308/htmlentities-with-exceptions –

+0

,阻止改寫(munging)輸入。 –

+0

當你在db中存儲輸入細節時,移除nl2br並將用戶細節存儲爲與輸入值相同,然後當你顯示值時首先使用htmlspecialchars,然後使用nl2br並最終回顯它。 –

回答

1

當u儲存到DB刪除nl2br並存儲用戶詳細地相同的輸入細節像輸入值,然後當U顯示值第一次使用的htmlspecialchars,然後使用nl2br並最終回聲它。

只是這樣改變。

$textForDataBase = $_POST['input']; 

$html = htmlspecialchars($val['descripcion']); 
echo nl2br($html); 
+0

偉大的這是做的很快,正是我所需要的,非常感謝你! –

+0

不認爲它會允許H1。 –

+0

這是目標,h1顯示爲我想要的純文本。 –

0

也許你可以使用strip_tags();

<?php 
$string = " 
<p>This is a p element</p><a href=''>An a element</a><h1>This is the input content</h1> I like Pizza<br />I like Cheese<br />This is the end of the input, as you see I pressed enter several times"; 

$output = strip_tags($string,"<br>"); 
echo $output; 
+0

嘿海德爾,感謝您的回答我沒有測試它,因爲Mahipal答案爲我工作,但無論如何感謝! –