2009-12-22 92 views
8

我有一個字符串可能看起來像這樣編碼HTML實體,但忽略HTML標籤 - 在PHP

$str = "<p>Me & Mrs Jones <br /> live in <strong style="color:#FFF;">España</strong></p>"; 
htmlentities($str,ENT_COMPAT,'UTF-8',false); 

,我怎樣才能將文本轉換爲HTML實體而不將HTML標籤?

注:我需要保持完整的HTML

+0

可能的重複:http://stackoverflow.com/q/1364933/1032370 – 2012-04-23 14:25:29

回答

-1

如果你的意思是純文本的轉換,那麼試試這個:

$orig = "<p>Me & Mrs Jones <br /> live in <strong style="color:#FFF;">España</strong></p>"; 
$str = strip_tags($orig); 

$str = htmlentities($str,ENT_COMPAT,'UTF-8',false); 
0

我以前沒有使用ヶ輛,但它似乎像一個更強大的urlencode版本(我使用了很多)。你可能也想嘗試:

htmlentities(strip_tags($str,ENT_COMPAT),'UTF-8',false);

就像一個小金塊,如果你想保留<br>標準carrage回報,你可以這樣做:

htmlentities(strip_tags(str_replace("<br>","\n",$str,ENT_COMPAT)),'UTF-8',false);

我知道這件事情我有時喜歡這樣做。

祝你好運。

+0

urlencode和htmlentities做不同的事情:urlencode使字符串有效放入網址(例如,轉化成%26),這些特性就會逃離一個在HTML中使用的標籤(例如轉向<<>)。 – 2009-12-22 12:40:04

6

聲明:我不會編碼任何實體,除了<,>和&。也就是說,如果你真的想這樣,這樣做:

$str = '...'; 
$str = htmlentities($str,ENT_NOQUOTES,'UTF-8',false); 
$str = str_replace(array('&lt;','&gt;'),array('<','>'), $str); 
+1

我也會這樣做,大多數情況下不需要編碼「和」,像'€,á,é這樣的東西應該已經被Unicode處理了 – 2009-12-22 12:40:15

+2

除非這樣做會失敗, 5「在他的標記 – TravisO 2009-12-22 12:47:10

+0

@TravisO:我希望輸入已經是有效的HTML,如果他的標記中有2> 5,那麼將不會像處理」「那樣處理 – Evert 2009-12-22 14:51:43

1

的問題,你面對的是,在情況下,你已經編碼「<」,並在你的文字「>」,所以你必須在轉換後將其過濾掉。

這與埃弗特的答案,但增加了一個步驟,以允許在你的標記像1 < 2內容:

$str = htmlentities($str,ENT_NOQUOTES,'UTF-8',false); 
$str = str_replace(array('&lt;','&gt;'),array('<','>'), $str); 
$str = str_replace(array('&amp;lt;','&amp;gt'),array('&lt;','&gt;'), $str); 
1

一個很好的答案後通過Pascal MARTIN

看到這個SO topic

要恢復,您可以使用這段代碼來檢索對應列表character => entity

$list = get_html_translation_table(HTML_ENTITIES); 
unset($list['"']); 
unset($list['<']); 
unset($list['>']); 
unset($list['&']);