2011-01-23 53 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;