То, как удалить htmlentities () оценивает от базы данных?

Задолго до того, как я знал что-либо - не, что я знаю много даже сейчас - я разработал веб-приложение в php, который вставил данные в мою mysql базу данных после прокручивания значений htmlentities(). Я в конечном счете пришел в себя и удалил этот шаг и засунул его в вывод, а не ввел и продолжил свой веселый путь.

Однако я должен был с тех пор пересмотреть некоторые из этих старых данных, и к сожалению у меня есть проблема, когда они отображены на экране, я получаю значения, отображенные, которые являются эффективно htmlentitied дважды.

Так, есть ли mysql или phpmyadmin способ возвратить все более старые, затронутые строки в их соответствующие символы, или я должен буду записать сценарий, чтобы считать каждую строку, декодировать и обновить все 17 миллионов строк в 12 таблицах?

Править:

Спасибо за справку все я записал свой собственный ответ ниже с некоторым кодом в, это не симпатично, но это работало над данными тестирования, ранее настолько запрещающими кого-то указывающего на явную ошибку в моем коде, в то время как я нахожусь в постели, я буду выполнять его на резервном DB завтра и затем на живом, если это удастся хорошо.

11
задан TooManyCooks 15 May 2010 в 01:23
поделиться

4 ответа

В итоге я использовал это, не очень красиво, но я устал, сейчас 2 часа ночи, и это сделало свое дело! (Edit: on test data)

$tables = array('users', 'users_more', 'users_extra', 'forum_posts', 'posts_edits', 'forum_threads', 'orders', 'product_comments', 'products', 'favourites', 'blocked', 'notes');
foreach($tables as $table)
    {       
        $sql = "SELECT * FROM {$table} WHERE data_date_ts < '{$encode_cutoff}'";
        $rows = $database->query($sql);
        while($row = mysql_fetch_assoc($rows))
            {
                $new = array();
                foreach($row as $key => $data)
                    {
                        $new[$key] = $database->escape_value(html_entity_decode($data, ENT_QUOTES, 'UTF-8'));
                    }
                array_shift($new);
                $new_string = "";
                $i = 0;
                foreach($new as $new_key => $new_data)
                    {
                        if($i > 0) { $new_string.= ", "; }
                        $new_string.= $new_key . "='" . $new_data . "'";
                        $i++;
                    }
                $sql = "UPDATE {$table} SET " . $new_string . " WHERE id='" . $row['id'] . "'";
                $database->query($sql);
                // plus some code to check that all out
            }
    }
5
ответ дан 3 December 2019 в 09:19
поделиться

Поскольку PHP был методом кодирования, вы захотите использовать его для декодирования. Вы можете использовать html_entity_decode , чтобы преобразовать их обратно в исходные символы. Нужна петля!

Только будьте осторожны, чтобы не декодировать строки, которым это не нужно. Не знаю, как вы это определите.

4
ответ дан 3 December 2019 в 09:19
поделиться

Это немного неуклюже, но я думаю, что массовое обновление - единственный выход...

$Query = "SELECT row_id, html_entitied_column FROM table";
$result = mysql_query($Query, $connection);
while($row = mysql_fetch_array($result)){
    $updatedValue = html_entity_decode($row['html_entitied_column']);
    $Query = "UPDATE table SET html_entitied_column = '" . $updatedValue . "' ";
    $Query .= "WHERE row_id = " . $row['row_id'];
    mysql_query($Query, $connection);
}

Это упрощенный вариант, без обработки ошибок и т.д. Не уверен, каково будет время обработки миллионов строк, поэтому вам, возможно, придется разбить его на части, чтобы избежать таймаутов скрипта.

0
ответ дан 3 December 2019 в 09:19
поделиться

Я думаю, что написание php-скрипта - хорошее дело в этой ситуации. Как сказал Дейв, вы можете использовать функцию html_entity_decode () для обратного преобразования ваших текстов.

Сначала попробуйте свой сценарий на столе с несколькими записями. Это сэкономит вам много времени на тестирование. Конечно, не забудьте сделать резервную копию ваших таблиц перед запуском php-скрипта.

Боюсь, более короткой возможности нет. Вычисление миллионов строк остается довольно дорогостоящим, независимо от того, как вы конвертируете наборы данных обратно. Так что возьмите php-скрипт ... это самый простой способ

2
ответ дан 3 December 2019 в 09:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: