Ver Mensaje Individual
  #7 (permalink)  
Antiguo 25/02/2016, 19:08
abrahamhs
 
Fecha de Ingreso: enero-2009
Ubicación: Kandor
Mensajes: 209
Antigüedad: 15 años, 3 meses
Puntos: 11
Respuesta: eliminar caracteres especiales PHP

Primero que nada decirte que eso es un gran problema y hacerlo correctamente casi nunca funciona de forma que sea multiplataforma. Mira esta pagina [URL="http://evertpot.com/filesystem-encoding-and-php/"]http://evertpot.com/filesystem-encoding-and-php/[/URL]

Para que funcione correctamente la codificación para español en linux. Primero tienes que instalarle la codificación en español de tu país al Sistema Operativo. Por ejemplo yo que estoy en México sería utf8_spanish_ci. Muchas distros linux hacen esto en la instalación preguntandote donde vives.

Despues, si estas usando xampp debes configurar apache y php para que usen utf8:

En apache:
[httpd.conf]
AddDefaultCharset utf-8

en algunas versiones de apache no se encuentra AddDefaultCharset en el lugar habitual y tienes que buscar $cfg['DefaultCharset'] = 'utf-8';
en toda la instalacion o variables similares.

En php:
[php.ini]
default_charset = "utf-8"
mbstring.internal_encoding=utf-8
mbstring.http_output=UTF-8
mbstring.encoding_translation=On
mbstring.func_overload=0

Si estas usando una versión superior o igual a php 5.6 estos parametros estan obsoletos:
mbstring.internal_encoding
mbstring.http_input
mbstring.http_output
y basta con poner default_charset = "utf-8"

Si estas usando XML-RPC:
[xmlrpc.inc]
cambia $GLOBALS['xmlrpc_internalencoding']='ISO-8859-1';
por $GLOBALS['xmlrpc_internalencoding']='UTF-8';

Si usas mysql toda la collation de Base de datos y tablas debe ser utf8 - utf8_spanish_ci y en la conexión:
$Conex=new mysqli(.....);
$Conex->set_charset("utf8");

Si usas correo como por ejemplo PHPMailer:
$mail= new PHPMailer();
$mail->CharSet = 'UTF-8';

por ultimo todos tus HTMLs o PHP que usen html tiene que tener:
<meta charset="UTF-8">

Esto funcionara perfectamente en linux pero si tratas de escribir archivos a disco en windows veras que no funciona (lo explica la url que puse hasta arriba). Es entonces cuando hay que recurrir a iconv. Ejemplo:

$nombre="ññ.txt"
$f2=fopen(iconv("UTF-8", "ISO-8859-1",$nombre),"w");
fwrite($f2,$texto);
fclose($f2);

ó

$tam=filesize(iconv("UTF-8", "ISO-8859-1",$nombre));

Creo que así no debería haber problemas. Y el problema de origen es porque los 3 sistemas operativos principales manejan la codificacion de difernete forma.
Espero les sirva.

Última edición por abrahamhs; 25/02/2016 a las 19:26 Razón: error en una url de respuesta