mysql_real_escape_string () уезжающие наклонные черты в MySQL

Вы можете использовать опции json_encode() JSON_PRETTY_PRINT:

json_encode($myArray,JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT);

редактировать:

, если вы используете Windows, вам нужно изменить возврат каретки, используя что-то вроде этого:

$myArray = array("test" => "data");

$buffer = json_encode($myArray,JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT);

echo str_replace("\n", "\r\n", $buffer);
// or
$fp = fopen('resultsv2.json', 'w');
fwrite($fp, str_replace("\n", "\r\n", $buffer));
fclose($fp);

Если вы печатаете это в браузере, вам нужно использовать <pre> теги

<pre>
echo json_encode($myArray,JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT);
</pre>
12
задан Mark Biek 6 October 2008 в 19:57
поделиться

6 ответов

Хост, который Вы переместили, вероятно, имеет magic_quotes_runtime включенный. Можно выключить его с set_magic_quotes_runtime(0).

Выключите magic_quotes_runtime, и затем изменитесь, Ваш код для использования связывают переменные, вместо того, чтобы использовать строковый выход.

16
ответ дан 2 December 2019 в 19:00
поделиться

это звучит, как будто Вам включили волшебные кавычки. Выключение его не слишком трудно: просто создайте файл в своем названном корневом каталоге .htaccess и помещенный эта строка в него:

php_flag magic_quotes off

Если это не возможно по любой причине, или Вы хотите изменить свое приложение, чтобы смочь обработать волшебные кавычки, использовать эту технику:

Вместо того, чтобы получить доступ к переменным запроса непосредственно, используйте функцию вместо этого. Та функция может затем проверить, идут ли волшебные кавычки или прочь и полоса режет соответственно. Просто выполнение stripslashes () по всему не будет работать, потому что Вы избавитесь от наклонных черт, которые Вы на самом деле хотите.

function getVar($key) {
    if (get_magic_quotes_gpc()) {
        return stripslashes($_POST[$key]);
    } else {
        return $_POST[$key];
    }
}

$x = getVar('x');

Теперь, когда у Вас есть это, все Ваши входящие переменные готовы быть оставленными снова и mysql_real_escape_string() не наполнит их.

2
ответ дан 2 December 2019 в 19:00
поделиться

Необходимо было, вероятно, включить волшебные кавычки. Выяснение точно, как выключить его, может быть настоящей головной болью в PHP. В то время как можно выключить волшебные кавычки с set_magic_quotes_runtime(0), это не достаточно - Волшебные кавычки уже изменили входные данные в этой точке, таким образом, необходимо отменить изменение. Попробуйте этим отрывком: http://talks.php.net/show/php-best-practices/26

Или еще лучше - Отключают волшебные кавычки в php.ini, и любые .htaccess файлы это может быть установлено в.

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

mysql_real_escape_string($str); как предполагается, делает точно это. это предназначено для добавления обратных косых черт к специальным символам особенно, когда Вы хотите передать запрос mysql. Обратите внимание, что оно также принимает во внимание набор символов mysql.

Для более безопасных методов кодирования было бы хорошо отредактировать Ваш код и использование stripslashes() считать данные и удалить наклонные черты.

-4
ответ дан 2 December 2019 в 19:00
поделиться

Функция ниже корректно удалит косые черты перед вставкой в базу данных. Я знаю, что вы сказали, что магические кавычки не включены, но что-то добавляет косую черту, поэтому попробуйте следующую страницу и посмотрите результат. Это поможет понять где. Вызовите с page.php? Var = что-то с withata_that; will`be | escaped

Скорее всего, вы увидите номер три, выводящий больше слешей, чем необходимо.

* Также измените подробности в db.

<?php

$db = mysql_connect('host', 'user', 'pass');

$var = $_REQUEST['var'];
echo "1: $var :1<br />";
echo "2: ".stripslashes($var)." :2<br />";
echo "3: ".mysql_real_escape_string($var)." :3<br />";
echo "4: ".quote_smart($var)." :4<br />";


function quote_smart($value)
{
    // Stripslashes is gpc on
    if (get_magic_quotes_gpc())
    {
        $value = stripslashes($value);
    }
    // Quote if not a number or a numeric string
    if ( !is_numeric($value) )
    {
        $value = mysql_real_escape_string($value);
    }
    return $value;
}

?>

-1
ответ дан 2 December 2019 в 19:00
поделиться

I can think of a number of things that could cause this. But it depends how you are invoking SQL queries. If you moved to use parameterized queries like with PDO, then escaping is unnecessary which means the call to mysql_real_escape_string is adding the extra slashes.

If you are using mysql_query etc. then there must be some code somewhere like addslashes which is doing this. This could either be before the data is going into the database, or after.

Also you say you have disabled magic quotes... if you haven't already, just do a hard check in the code with something like this:

echo htmlentities($_GET['value']); // or $_POST, whichever is appropriate

Make sure there are no slashes in that value, then also check this:

echo "Magic quotes is " . (get_magic_quotes_gpc() ? "ON" : "OFF");

I know you've said multiple times it isn't magic quotes, but for us guys trying to help we need to be sure you have checked the actual PHP output rather than just changing the config (which might not have worked).

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

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