[Aporte] UTF-8 Sanitize Primitivo

Iniciado por z3nth10n, 25 Febrero 2014, 18:35 PM

0 Miembros y 1 Visitante están viendo este tema.

z3nth10n

Hola buenas.

Pues acabo de terminar de hacer un PHP super básico, que básicamente sirve para aquella gente tan despistada como yo, que no haya usado SET NAMES utf8 antes, haya cambiado de idea, y haya jodido todo.

Básicamente, si tenéis algún carácter que no sea UTF-8 y al cambiar la cotejación de PHP o MySQL se haya jodido todo, aquí podréis volver todo UTF-8.

Aquí el código:

Código (php) [Seleccionar]
<?php

//Functions

function strposa($haystack$needles=array(), $offset=0) {
        
$chr = array();
        foreach(
$needles as $needle) {
                
$res strpos($haystack$needle$offset);
                if (
$res !== false$chr[$needle] = $res;
        }
        if(empty(
$chr)) return false;
        return 
min($chr);
}

//Valores de conexion
$localhost '';
$dbuser =  '';
$dbpass '';
$dbname '';

//Conexión + UTF-8
$conn mysqli_connect($localhost$dbuser$dbpass$dbname) or die('Could not connect: ' mysqli_error());

mysqli_query($conn"SET NAMES utf8");

echo 
'<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>'
;

$unwanted_array = array(    'Š' 'š' 'Ž' 'ž' 'À' 'Á' '' 'Ã' 'Ä' 'Å' 'Æ' 'Ç' 'È' 'É' ,
                            
'Ê' 'Ë' 'Ì' 'Í' 'Î' 'Ï' 'Ñ' 'Ò' 'Ó' 'Ô' 'Õ' 'Ö' 'Ø' 'Ù' ,
                            
'Ú' 'Û' 'Ü' 'Ý' 'Þ' 'ß' 'à' 'á' '' 'ã' 'ä' 'å' 'æ' 'ç' ,
                            
'è' 'é' 'ê' 'ë' 'ì' 'í' 'î' 'ï' 'ð' 'ñ' 'ò' 'ó' 'ô' 'õ' ,
                            
'ö' 'ø' 'ù' 'ú' 'û' 'ý' 'ý' 'þ' 'ÿ'  );

$sql "SHOW TABLES FROM toomanyd_database";
$resultado mysqli_query($conn$sql);

if (!
$resultado) {
    echo 
"Error de BD, no se pudieron listar las tablas\n";
    echo 
'Error MySQL: ' mysqli_error();
    exit;
}

while (
$fila mysqli_fetch_row($resultado)) {
$curfila $fila[0];
    
$resultado1 mysqli_query($conn"SHOW COLUMNS FROM `$curfila`");
if (!$resultado1) {
    echo 'No se pudo ejecutar la consulta: ' mysqli_error();
    exit;
}

$beta_number mysqli_num_rows(mysqli_query($conn"SELECT * FROM `$curfila`"));
$anum mysqli_fetch_array(mysqli_query($conn"SELECT MAX(id) as last FROM `$curfila`"));
$number $anum['last'];
if (mysqli_num_rows($resultado1) > && $number 0) {
    while ($fila mysqli_fetch_assoc($resultado1)) {
for($i 1$i <= $number$i++) 
{
$field $fila['Field'];
$acon mysqli_fetch_array(mysqli_query($conn"SELECT `$field` as content FROM `$curfila` WHERE id='$i'"));
$content $acon['content'];
if(!is_numeric($content)) {
if($content != null) {
if(ip2long($content) === false) {
mb_internal_encoding('UTF-8');
if(mb_detect_encoding($content) === "UTF-8") {
$sanitized utf8_decode($content);
if($sanitized != $content && strposa($sanitized$unwanted_array1)) {
mysqli_query($conn"UPDATE `$curfila` SET `$field`='$sanitized' WHERE id='$i'");
}
}
}
}
}
}
    }
}
}

echo 
'</body>
</html>'
;


?>


Puede que haya errores puesto que uso mysql, y he hecho una conversión rapida a mysqli... :-(

NOTA: Haced una copia de seguridad de vuestra base de datos.
NOTA2: Debéis guardar el archivo en UTF-8 (no es necesario, pero una recomendación)

Un saludo.

Interesados hablad por Discord.