utf8 htmlentities html_entity_decode especiales convertir caracteres aacute php

php - html_entity_decode - htmlentities destruye las cadenas utf-8



ã php (5)

Sucedió algo extraño aquí y no puedo entender por qué, en mi servidor php 5.2.5 (Solo en Linux, los servidores php de Windows no tienen el mismo problema) Cuando uso un formulario POST para publicar el contenido en una entrada que contiene "é" y en el otro lado yo

echo(htmlentities($_POST["myinput"]))

se hace é

Pero si hago eco de mi

$_POST["myinput"]

simplemente muestra "é", así que esto significa que mi htmlentities no usa UTF-8 de forma predeterminada, ¿dónde puedo cambiar el conjunto de caracteres utilizado por htmlentities?

Intenté cambiarlo en mi php.ini default_charset = "UTF-8", ¿pero tampoco funcionará?


Del fi2.php.net/manual/en/function.htmlentities.php php: htmlentities () toma un tercer argumento opcional de codificación que define la codificación utilizada en la conversión. Desde PHP 5.6.0, el valor de default_charset se usa como predeterminado. Desde PHP 5.4.0, UTF-8 es el predeterminado. PHP anterior a 5.4.0, ISO-8859-1 se utiliza como predeterminado. Aunque este argumento es técnicamente opcional, se recomienda encarecidamente que especifique el valor correcto para su código.



La única forma de cambiar la htmlentities() es especificándola en su tercer parámetro.

No hay manera de cambiar la codificación predeterminada. Antes de PHP 5.4 siempre es iso-8859-1 .

Esto fue cambiado en PHP 5.4 sin embargo y ahora es siempre utf-8


Y si no desea preocuparse por tantas codificaciones de conjuntos de caracteres diferentes o si htmlentities no funciona para usted, aquí tiene la alternativa: usé el formulario de conexión a DB (y PHPV5) de mysqli para escribir / insertar en la base de datos MySQl.

$Notes = $_POST[''Notes'']; //can be text input or textarea. $charset = mysqli_character_set_name($link); //mysqli connection printf ("To check your character set but not necessary %s/n",$charset); $Notes = str_replace(''"'', ''&quot;'', $Notes); //double quotes for mailto: emails. $von = array("ä","ö","ü","ß","Ä","Ö","Ü"," ","é"); //to correct double whitepaces as well $zu = array("&auml;","&ouml;","&uuml;","&szlig;","&Auml;","&Ouml;","&Uuml;","&nbsp;","&#233;"); $Notes = str_replace($von, $zu, $Notes); echo " Notes:".$Notes."<br>" ; $Notes = mysqli_real_escape_string($link, $Notes); //for mysqli DB connection. // Escapes special characters in a string for use in an SQL statement echo " Notes:".$Notes ; //ready for inserting


htmlspecialchars($str, ENT_QUOTES, "UTF-8")

Esto también es mejor para prevenir xss que solo htmlentities()