Ver Mensaje Individual
  #2 (permalink)  
Antiguo 14/03/2016, 18:03
abrahamhs
 
Fecha de Ingreso: enero-2009
Ubicación: Kandor
Mensajes: 209
Antigüedad: 15 años, 3 meses
Puntos: 11
Respuesta: Problema al adjuntar archivos con PHP

El problema es la codificación de caracteres y vuelvo a pegar esto que respondido en otros post. Y te recomiendo sobre todo leer la url que adjunto. Aqui va:


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

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 así practicamente ya no se usa utf8_decode y utf8_encode. Y el problema de origen es porque los 3 sistemas operativos principales manejan la codificacion de diferente forma. Lo explica el enlace que puse.
Espero les sirva.