2011-01-23 13 views
11

Poniższy kod przekształca tekst dla znaków z akcentami. Ale konwertuje również znaczniki HTML, które chciałbym pozostawić w stanie nienaruszonym. Jak mogę konwertować tylko znaki akcentowane i pozostawić wszystkie pozostałe znaki specjalne w stanie nienaruszonym? Dzięki.Konwertuj akcenty na HTML, ale zignoruj ​​tagi

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

Odpowiedz

21

htmlspecialchars() i htmlspecialchars_decode() tylko kodowania/dekodowania &, <, >, ' i "; można więc wykorzystywać jego konwertować swoje jednostki z powrotem do swoich HTML znaków specjalnych:

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

Działa to także wtedy, gdy na stronie wykorzystywane są zarówno zakodowane i zwykłe jednostki (np: zarówno '<' 'i' <). Ryzyko związane z konwersją i natychmiastową konwersją z powrotem polega na tym, że w niektórych przypadkach część oryginalnego tekstu może zostać przypadkowo utracona. W tym przypadku '<' zamieni się w '<', a następnie ** wszystkie wystąpienia '<' ** są konwertowane na '<' ponownie, w tym wszystkie wystąpienia '<' w oryginalnym tekście. Jednak tak nie jest, ponieważ ogranicznik podmiotu '&' również jest konwertowany! Nie musisz się więc martwić niezamierzoną konwersją tekstu. Brzmi dość oczywiste, ale po prostu przypominam. –

+1

doskonałe rozwiązanie, dzięki – Codex73

1

A jednak hack, ale można zastosować htmlentities() jak już to zrobić najpierw, a następnie odwrócić go do standardu XML znaków (<, >, &, ", ') przy użyciu htmlspecialchars_decode(). To przywróci tagi.

0

To wydaje się działać OK

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; 
+0

W moim przypadku get_html_translation_table (HTML_ENTITIES); strtr ($ string, $ trans); wystarczyło, by wykonać bezpośredni wydruk moich treści. – Muffun

Powiązane problemy