[PHP]GET/POST データで、自動的にエスケープ(\)が追加される

困った、、、

PHPを使用して、Web上からテキストファイルをメンテナンスできるツールを作成していた。
その時に作成したソースは下記の通り。

 

PHP

$openFile = "./data.txt"; 
$input_data1 = (string)$_POST['inputdata']; 
$fp = fopen($openFile,'w'); 
fwrite($fp,$input_data1); 
fclose($fp); 
print("Done");

 

どうも、”(ダブルクォート) の前に、必ず \(円マーク) が追加されるようだ。

ソースファイルもいたってシンプル
\が付与される要素はない

これ、絶対PHPが悪いやつじゃん

解決策

調べたところ、やっぱりPHPが自動的に付与しているみたい。
PHPの設定ファイルを変更することで、自動付与する機能を停止できるみたい。

php.ini内の[magic_quotes_gpc]が[ON]になっている場合に
$_GETや$_POST等の変数が勝手にエスケープされるみたいです。

そこで、下記の通り設定ファイルを変更

 

php.ini

magic_quotes_gpc	off

 

 

これで無事解決!!

サンプルコード使用時の注意点

今回のサンプルコードでは、妥当性のチェックを行っていません。
例外が発生する場合があります。
実際の実装では妥当性の確認を行うように注意してください。