2012-02-22 7 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

これは何かの理由では大丈夫だったのですが、このようになってしまったときには大変でした。$ value = mysql_real_escape_string($ value); – user1209203

答えて

1

を削除されたエスケープ値を返しますmysql_real_escape_string ..あなたが使用していません戻り値、なぜあなたはそれについて不平を言っていますか?

また、ブラウザの出力を確認すると、改行が表示されません。生成されたソースを確認してください。

1

ブラウザでこれを表示している場合、改行は取り除かれているだけです。ページのソースを表示し、または<pre>タグでラップ:アドバイスとして

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

、あなたはエラーを回避し、それを安全にするためにシリアル化する前に、HTMLフォームからベース64にシリアライズされた結果を符号化することができます。

$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%大きくしてください。

関連する問題