我有一個字符串可能看起來像這樣編碼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
我有一個字符串可能看起來像這樣編碼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
如果你的意思是純文本的轉換,那麼試試這個:
$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);
我以前沒有使用ヶ輛,但它似乎像一個更強大的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);
我知道這件事情我有時喜歡這樣做。
祝你好運。
urlencode和htmlentities做不同的事情:urlencode使字符串有效放入網址(例如,轉化成%26),這些特性就會逃離一個在HTML中使用的標籤(例如轉向<<>)。 – 2009-12-22 12:40:04
聲明:我不會編碼任何實體,除了<,>和&。也就是說,如果你真的想這樣,這樣做:
$str = '...';
$str = htmlentities($str,ENT_NOQUOTES,'UTF-8',false);
$str = str_replace(array('<','>'),array('<','>'), $str);
的問題,你面對的是,在情況下,你已經編碼「<
」,並在你的文字「>
」,所以你必須在轉換後將其過濾掉。
這與埃弗特的答案,但增加了一個步驟,以允許在你的標記像1 < 2
內容:
$str = htmlentities($str,ENT_NOQUOTES,'UTF-8',false);
$str = str_replace(array('<','>'),array('<','>'), $str);
$str = str_replace(array('&lt;','&gt'),array('<','>'), $str);
一個很好的答案後通過Pascal MARTIN
看到這個SO topic
要恢復,您可以使用這段代碼來檢索對應列表character => entity
:
$list = get_html_translation_table(HTML_ENTITIES);
unset($list['"']);
unset($list['<']);
unset($list['>']);
unset($list['&']);
可能的重複:http://stackoverflow.com/q/1364933/1032370 – 2012-04-23 14:25:29