Supongo que a todos nos ha pasado que tenemos un sitio con codificación de caracteres en ISO y, por X razón, tenemos que convertir todo a UTF. Una opción es subir los archivos en modo binario en vez de texto, pero los acentos, tildes y otros caracteres especiales no serán convertidos. Por eso cree el siguiente script.
Crea el directorio destino, copia el siguiente código y guárdalo en un archivo
__iso2utf.php (dentro de ese directorio), modifica
$in_dir y
$out_dir para apuntar a las carpetas de origen y destino, respectivamente; después abre en tu navegador el script desde localhost, ejemplo:
http://localhost/sitio.utf/__iso2utf.php
Código php:
Ver original<?php
$in_dir = '/wamp/www/sitio';
$out_dir = '/wamp/www/sitio.utf';
'php',
'txt',
'js',
'css',
'tpl',
'htm',
'html'
);
$cdirs = $cfiles = 0;
function getDir($input, $output) {
global $extensions, $cdirs, $cfiles;
echo 'Cargando directorio: ' . $input . '<br />';
die('Error abriendo el directorio.'); while(($file = readdir($cdir)) !== false) { if($file == '.' || $file == '..')
continue;
$ifile = "$input/$file";
$ofile = "$output/$file";
// Es directorio, primero vemos que exista en el destino
// Si estás en linux agrega permisos de escritura: mkdir($ofile, 0777)
die('No se pudo crear el directorio en la ruta de destino.'); }
// Procesamos el directorio y continuamos el ciclo
$cdirs++;
getDir($ifile, $ofile);
continue;
}
continue;
echo '---- Procesando el archivo: ' . $file . '<br />';
// Leemos el archivo actual
// Creamos el nuevo archivo en binario
if(! $file_utf = fopen($ofile, 'wb')) die('No se pudo crear el archivo de destino'); // Grabamos el archivo, convirtiendo el contenido en UTF-8
$cfiles++;
}
}
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<body>
<?php
getDir($in_dir, $out_dir);
echo '<p>Proceso finalizado con éxito:<br />';
echo "<b>$cdirs</b> directorios y <b>$cfiles</b> archivos procesados.</p>";
?>
</body>
</html>
Lo que hace el script es recorrer todas las carpetas del sitio, analizar la extensión de los archivos y crear copias en binario de cada una de ellas en la carpeta de destino que corresponda.
Recuerda que esta es una solución temporal. Si Subes alguno de estos archivos por FTP debes hacerlo en modo binario o "la magia" podría no funcionar. Cada que vuelvas a editar alguno de estos archivos debes guardarlos con la codificación adecuada:
En Notepad (de windows) Menú -> Archivo -> Guardar como... y en la ventana de diálogo seleccionas Codificación: UTF-8 y haces click en aceptar cuando te pregunte si deseas sobreescribir.
En Notepad++ Menú -> Formato -> Codificar en UTF-8 y después grabas el archivo con CTRL + S o Menú -> Archivo -> Guardar
Nota: En ambiente LINUX deberás cambiar la parte de
mkdir para asignar permisos de escritura al crear directorios y, tal vez, necesitarás modificar el modo de creación de archivos en
fopen de
'wb' a
'w', teniendo en cuenta que la creación de archivos de texto es por default codificación UTF-8.