2012-08-15 32 views
8

tengo el siguiente código:alternativa a mb_convert_encoding con HTML ENTIDADES charset

mb_convert_encoding($string, 'HTML-ENTITIES', 'utf-8'); 

Es necesario disponer de un código alternativo que hace exactamente lo mismo, pero no utiliza ningún mb_nogueira @ yahoo.com * funciones (la extensión mb no es disponible en algunos entornos).

pensé que

utf8_decode(htmlentities($string, ENT_COMPAT, 'utf-8')); 

debe hacer exactamente lo mismo, pero por desgracia no es así.

Respuesta

20

He jugado un poco un poco, y parece muy interesante. Parece que la segunda parte también ejecuta "htmlspecialchars". Debe haber algún error en mb_convert_encoding, ya que htmlentities no se ejecuta correctamente.

Si ejecuta htmlspecialchars_decode sobre el resultado, se obtiene exactamente el mismo que si se usaría mb_convert_encoding.

El código:

$string = 'Test:!"$%&/()=ÖÄÜöäü<<'; 
echo mb_convert_encoding($string, 'HTML-ENTITIES', 'utf-8')."\n\n"; 
echo htmlspecialchars_decode(utf8_decode(htmlentities($string, ENT_COMPAT, 'utf-8', false))); 

Aquí una demostración de que el código anterior: http://sandbox.onlinephpfunctions.com/code/715acade3b8337d9c9e48e58deee2a237015c259

Y aquí una demo sin htmlspecialchars_decode, para mostrar su problema: http://sandbox.onlinephpfunctions.com/code/5c4a32bf99aa8fd6246c4a77132a023d32945363

+0

Absolutamente genial - gracias ¡mucho! – Simon

+0

¡Gracias, me salvaste el día! Esto funciona bien con DOMDocument :) –