事象
GETやPOSTで送信されるデータにダブルクォーテーションが含まれている場合、勝手にエスケープされてされてしまい少しハマりました。
\"保登心愛\"香風智乃\"
原因
原因はphp.iniのmagic_quotes_gpc
が有効の為でした。
GPC(Get/Post/Cookie) 処理に関する magic_quotes の設定を行います。 magic_quotes が on の場合、'(シングルクオート)、" (ダブルクオート)、(バックスラッシュ) 、NULL には全て自動的に バックスラッシュでエスケープ処理が行われます。magic_quotes_sybase も on の場合、シングルクオートは、バックスラッシュではなく シングルクオートでエスケープされます。
ちなみにmagic_quotes_runtime
とmagic_quotes_sybase
は以下
magic_quotes_runtime が有効の場合、 データベースおよびテクストファイルを含む外部ソースから データを返す全ての関数のクオートは、バックスラッシュで エスケープされます。
magic_quotes_sybase 有効な場合、シングルクオートはバックスラッシュではなくシングルクオートで エスケープされます。 onの場合、 magic_quotes_gpc の指定を完全に上書きします。 これら両方のディレクティブを有効にすると、シングルクオートは ''とエスケープされます。 ダブルクオートやNULLはそのままとなり、エスケープされません。
対策
対策方法は3つあります。
php.ini
magic_quotes_gpc = Off
.htaccess
php_flag magic_quotes_gpc Off
プログラム
$str = stripslashes($_POST['coco_chino']);
この仕様は5.4.0で削除されたのでほとんどの人は遭遇しないと思われます。。。
マジッククオートとは
参考記事
PHPでクォーテーションが勝手にエスケープされてしまう時は
【PHP】POST送信時にクォーテーションが勝手にバックスラッシュでエスケープされてしまう【マジッククオート】【WordPress】