Вы можете использовать опции 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>
Хост, который Вы переместили, вероятно, имеет magic_quotes_runtime
включенный. Можно выключить его с set_magic_quotes_runtime(0)
.
Выключите magic_quotes_runtime
, и затем изменитесь, Ваш код для использования связывают переменные, вместо того, чтобы использовать строковый выход.
это звучит, как будто Вам включили волшебные кавычки. Выключение его не слишком трудно: просто создайте файл в своем названном корневом каталоге .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()
не наполнит их.
Необходимо было, вероятно, включить волшебные кавычки. Выяснение точно, как выключить его, может быть настоящей головной болью в PHP. В то время как можно выключить волшебные кавычки с set_magic_quotes_runtime(0)
, это не достаточно - Волшебные кавычки уже изменили входные данные в этой точке, таким образом, необходимо отменить изменение. Попробуйте этим отрывком: http://talks.php.net/show/php-best-practices/26
Или еще лучше - Отключают волшебные кавычки в php.ini
, и любые .htaccess файлы это может быть установлено в.
mysql_real_escape_string($str);
как предполагается, делает точно это. это предназначено для добавления обратных косых черт к специальным символам особенно, когда Вы хотите передать запрос mysql. Обратите внимание, что оно также принимает во внимание набор символов mysql.
Для более безопасных методов кодирования было бы хорошо отредактировать Ваш код и использование stripslashes()
считать данные и удалить наклонные черты.
Функция ниже корректно удалит косые черты перед вставкой в базу данных. Я знаю, что вы сказали, что магические кавычки не включены, но что-то добавляет косую черту, поэтому попробуйте следующую страницу и посмотрите результат. Это поможет понять где. Вызовите с 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;
}
?>
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).