2011-01-23 62 views
11

下面的代码将带有重音符的字符文本转换为文本。但它也转换了我想保留的HTML标签。我怎样才能转换重音字符,并保持所有其他特殊字符完好无损?谢谢。将重音转换为HTML,但忽略标记

$temp = file_get_contents("file.html"); 
echo htmlentities($temp,ENT_NOQUOTES,'UTF-8'); 

回答

21

htmlspecialchars()htmlspecialchars_decode()和将只编码/解码&<>'";因此,你可以使用后者的实体转换回自己的HTML特殊字符:

echo htmlspecialchars_decode(htmlentities($temp, ENT_NOQUOTES, 'UTF-8'), ENT_NOQUOTES); 
+0

一个页面上同时使用编码和滑动实体时,这也适用(例如:两个`<`和``<)。转换和即时转换的风险是,在某些情况下,部分原始文本可能会无意中丢失。在这种情况下,`<`会变成'<`,然后**所有出现的'<`**都会再次转换为`<`,包括原始文本中出现的所有'<`。 但是,情况并非如此,因为实体分隔符`&`本身也被转换!所以你不必担心文字的意外转换。听起来很明显,但我只是提醒一下。 – 2011-09-08 13:31:40

+1

优秀的解决方案,谢谢 – Codex73 2015-01-15 01:43:13

1

A,但黑客攻击的,但你可以申请htmlentities()像你已经做到第一,然后扭转它为标准的XML字符(<,>,&,",')使用htmlspecialchars_decode()。这将恢复标签。

0

这似乎是工作确定

if (!function_exists('make_accents')): 
function make_accents($string) 
{ 
    //$string = "<p>Angoulême</p>"; 
    $trans = get_html_translation_table(HTML_ENTITIES); 
    //$encoded = "&lt;p&gt;Angoul&ecirc;me&lt;/p&gt;"; 
    $encoded = strtr($string, $trans); 
    //Next two lines put back the < & > tags 
     $noHTML = str_replace("&lt;", "<", $encoded); 
    $encoded = str_replace("&gt;", ">", $noHTML); 
    return $encoded; 
} 
endif;