2011-01-23 27 views
11

El código siguiente convierte texto para los caracteres con acentos. Pero también convierte las etiquetas HTML que me gustaría dejar intactas. ¿Cómo solo puedo convertir caracteres acentuados y dejar intactos todos los demás caracteres especiales? Gracias.Convierta los acentos a HTML, pero ignore las etiquetas

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

Respuesta

21

htmlspecialchars() y htmlspecialchars_decode() sólo habrá codificar/decodificar &, <, >, ' y "; por lo tanto se puede utilizar este último para convertir sus entidades de vuelta a sus caracteres especiales HTML:

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

Esto también funciona cuando una en una página se utilizan ambas entidades codificadas, casquillos (por ejemplo: tanto '<' y '' <). El riesgo de la conversión y de la conversión inversa instantánea es que, en algunos casos, algunas partes del texto original pueden perderse involuntariamente. En este caso, '<' se convertirá en '<' y luego ** todas las ocurrencias de '<' ** se convertirán nuevamente a '<', incluyendo todas las ocurrencias de '<' en el texto original. Sin embargo, este no es el caso, porque el delimitador de entidades '&' también se convierte. Por lo tanto, no tiene que preocuparse por la conversión involuntaria de texto. Suena bastante obvio, pero solo recuerdo. –

+1

excelente solución, gracias – Codex73

1

A, pero de un corte, pero puede aplicar htmlentities() como si ya lo hace primero, y luego invertirlo para el estándar XML caracteres (<, >, &, ", ') utilizando htmlspecialchars_decode(). Esto restaurará las etiquetas.

0

Esto parece funcionar bien

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

En mi caso, la get_html_translation_table (HTML_ENTITIES); strtr ($ string, $ trans); fue suficiente para hacer la salida directa de mi contenido. – Muffun

Cuestiones relacionadas