PHP-скрипт извлекает незашифрованные данные из MySQL - PullRequest
1 голос
/ 19 сентября 2019

Я создал скрипт в php, который создает файл .sql для некоторых конкретных записей в двух таблицах.Он отлично работает, проблема в том, что содержимое записей не в кодировке UTF-8, поэтому вместо è / à / ò / etc ..

используются странные символы. Вот сценарий:

function backup_tables($brand_id,$tables = '*')
{
    global $con;
    //get all of the tables
    if($tables == '*')
    {
        $tables = array();
        $result = mysqli_query($con,'SHOW TABLES');
        while($row = mysqli_fetch_row($result))
        {
            $tables[] = $row[0];
        }
    }
    else
    {
        $tables = is_array($tables) ? $tables : explode(',',$tables);
    }
    //cycle through
    foreach($tables as $table)
    {
        if($table == 'translated' || $table == 'translations') {
        $result = mysqli_query($con,'SELECT * FROM `'.$table.'` WHERE `brand_id`="'.$brand_id.'";');
        $num_fields = mysqli_num_fields($result);

        $return.= 'DROP TABLE `'.$table.'`;';
        $row2 = mysqli_fetch_row(mysqli_query($con,'SHOW CREATE TABLE '.$table));
        $return.= "\n\n".$row2[1].";\n\n";

        for ($i = 0; $i < $num_fields; $i++) 
        {
            while($row = mysqli_fetch_row($result))
            {
                $return.= 'INSERT INTO `'.$table.'` VALUES(';
                for($j=0; $j < $num_fields; $j++) 
                {
                    $row[$j] = addslashes($row[$j]);
                    // ereg_replace("\n","\\n",$row[$j]);
                    //preg_replace("\n","\\n",$row[$j]);
                    $row[$j] = str_replace("\n","\\n",$row[$j]);
                    if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
                    if ($j < ($num_fields-1)) { $return.= ','; }
                }
                $return.= ");\n";
            }
        }
        $return.="\n\n\n";
        }     
    }

    //save file
    $file = '/prod/backups/'.$brand_id.'_db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql';
    $file2 = PROD_URL.'backups/'.$brand_id.'_db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql';
    $handle = fopen($file,'w');     
    fwrite($handle,$return);
    fclose($handle);

    return $file2;
}

Я пытался добавить $return = html_entity_decode( $return, ENT_NOQUOTES, 'UTF-8' );, но ничего не произошло: (

1 Ответ

0 голосов
/ 19 сентября 2019

не предполагайте, что будет сделан правильный перевод;четко указывать кодировку символов в вашем проекте.Чем ближе вы можете использовать iconv

<?php
$text = "ü is still a valid ISO-8859-1";
echo 'Original : ', $text, PHP_EOL;
echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL;
echo 'IGNORE   : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL;
echo 'Plain    : ', iconv("UTF-8", "ISO-8859-1", $text), PHP_EOL;
?>

детали: http://php.net/manual/en/function.iconv.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...