Ver Mensaje Individual
  #4 (permalink)  
Antiguo 29/04/2016, 16:10
abrahamhs
 
Fecha de Ingreso: enero-2009
Ubicación: Kandor
Mensajes: 209
Antigüedad: 16 años
Puntos: 11
Respuesta: escapeshellarg() me elimina las ñ

Si tienes problemas de codificación de caracteres, tienes que cambiar toda la codificación de caracteres de apache, php, mysql, html:

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'] = ''; en toda la instalacion o variables similares y cambiarla por $cfg['DefaultCharset'] = 'utf-8';

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 usas mysql toda la collation de Base de datos y tablas debe ser utf8 - utf8_spanish_ci y en la conexión:

Código PHP:
Ver original
  1. $Conex=new mysqli(.....);
  2. $Conex->set_charset("utf8");
Por ultimo tus html debe tambien configurar el utf8 con la siguiente linea:

Código PHP:
Ver original
  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Esto funcionara perfectamente en linux pero si usas windows y tratas de escribir archivos a disco veras que no funciona (porque windows usa otra codificacion). Es entonces cuando hay que recurrir al gran repertorio de funciones que tiene PHP para codificación de caracteres, en este caso iconv. Ejemplo: al escribir en disco;

Código PHP:
Ver original
  1. $nombre="ññ.txt"
  2.     $f2=fopen(iconv("UTF-8", "ISO-8859-1",$nombre),"w");
  3.     fwrite($f2,$texto);
  4.     fclose($f2);
ó al leer de disco;

Código PHP:
Ver original
  1. $tam=filesize(iconv("UTF-8", "ISO-8859-1",$nombre));