2012-02-22 5 views
1

При взятии данных из формы HTML и сохранении значения в сериализованном массиве, если есть новая строка, сериализация происходит неправильно с mysql_real_escape_string.Новая строка в сериализованном массиве PHP

, например, это выводит строку неправильной длины также плюс новая линия была удалена

$value="new\r\nline"; 

mysql_real_escape_string($value); 


$array=array(); 
$array[0]=$value; 

$array=serialize($array); 

echo $array; 

печатает a:1:{i:0;s:9:"new line";}

+1

Неверная длина? '' new \ r \ nline "' имеет 9 байтов, длина правильная. Только потому, что вы не видите, что новая линия не означает, что ее нет. Часто символы, такие как '' \ r "' или '" \ n "', явно не отображаются, например. в вашем браузере. Но вместо этого, в частности, в вашем браузере, преобразуется в пробелы и нормализуется до одного пространства, даже если имеется несколько пробельных символов. Вместо этого используйте источник просмотра. – hakre

+0

Почему вы используете 'mysql_real_escape_string'? – Michas

+0

ОК по какой-то причине это были juts, когда это было похоже на это: $ value = mysql_real_escape_string ($ value); – user1209203

ответ

1

mysql_real_escape_string возвращает значение убежали .. вы не используете возвращаемое значение, так почему вы жалуетесь на это?

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

1

Если вы просматриваете это в браузере, новая строка просто удаляется. Просмотр исходного кода страницы, или обернуть его в <pre> тегах:

echo "<pre>$array</pre>"; 
0

Как совет, вы можете кодировать в базе 64 сериализованного результат от HTML формы до сериализации, чтобы избежать ошибок и сделать его безопасным.

$encodedValue=base64_encode($value); 

$array=array(); 
$array[0]=$encodedValue; 

$array=serialize($array); 

echo $array; 

Для декодирования Youre сохраненного значения просто сделать обратный процесс

$array=unserialize($array); 
$value=base64_decode($array[0]); 
echo $value; 

И значение HMTL формы остается неизменным. Кстати, кодирование в базе 64, безопасно хранить значение в BD, но на 33% больше.

Смежные вопросы