base64_encode апостроф - PullRequest
       8

base64_encode апостроф

0 голосов
/ 28 февраля 2011

Каждый раз, когда я base64_encode (); новые данные в моей базе данных, и они содержат апострофы ('), мой текст выглядит следующим образом, когда я base64_decode его:

Оригинал: Привет! Где всех?

После шифрования: Привет! Где / 100 * * все?

Как мне остановить это с помощью PHP?

Ответы [ 4 ]

1 голос
/ 28 февраля 2011

Просто избавьтесь от кодировки base64, и все будет в порядке.
Не кодируйте перед вставкой.
Не декодируйте при извлечении.

Вот и все.

Слушай, с тобой все ясно.

  • Сначала вы экранируете свои данные, добавляя обратную косую черту к нескольким символам.
    Этого достаточно для строк, заключенных в запрос в кавычках.Больше не нужно больше кодирования!
    Эти обратные слеши должны исчезнуть после вставки данных, поэтому вы не затрагиваете свои данные в базе данных.

  • Далее вы кодируете свои строки, запечатывание косых черт внутри!
    Затем, после декодирования, вы получите обратную косую черту в ваших данных.

Итак, вам нужно просто избавиться от base64,и все сразу будет хорошо!

1 голос
/ 28 февраля 2011

Я думаю, это связано с тем, что magic_quotes включен.

Правильно ли предположить, что вы base64_encode данные пришли из формы и сохранили ее в базе данных?

Если это так, определите и используйте эту функцию для обработки всего, что приходит от $_GET, $_POST или $_COOKIE:

function escape_gpc($var) {
    return get_magic_quotes_gpc() ? stripslashes($var) : $var;
}

if (isset($_POST['form_sent'])) {
    $somedata = escape_gpc($_POST['somedata']);
    // and then you base64_encode it and insert into the database.
}
0 голосов
/ 28 февраля 2011

Если вы не используете какую-либо экранирующую функцию (я полагаю, mysql_real_escape_string, но просто из статистики, вы не упомянули, используете ли вы БД поверх других или подготовленных операторов), скорее всего, у вас есть директива magic_quotes_gpc в php.ini, поэтому экранирующие косые черты добавляются автоматически перед вставкой данных в БД Таким образом, при извлечении записей у вас будет обратный слеш. Кодирование / декодирование - это то, что должно быть: кодирование и декодирование строки.

использование $decoded = stripslashes(base_64decode($your_datas_from_db));

0 голосов
/ 28 февраля 2011

Вы можете использовать stripslashes() для декодированного вывода, но убедитесь, что он был правильно экранирован, прежде чем вставляться в базу данных для начала.Вы кодируете и декодируете его как с помощью PHP?

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