たとえば、「それだけです」という文字列を保存したいとします。MySQL は自動的に ' 文字をエスケープします。PHP を使用してデータベースからその文字列をエコーする方法はありますが、\' のようなエスケープ文字の前にある \ を削除するにはどうすればよいですか? また、改行や空白などの他の書式も保持したいと思います。
3 に答える
準備済みステートメントを使用する場合、これらの文字は挿入時にエスケープされません。
stripslashes()
入力時にスラッシュを追加せざるを得ない場合に、スラッシュを削除するために使用します。
試してみましたかstripslashes()
、改行に関してはnl2br()
関数を使用するだけです。
例:
$yourString = "That\'s all\n folks";
$yourString = stripslashes(nl2br($yourString));
echo $yourString;
注:二重スラッシュは単一スラッシュ\\
に変わります\
おそらく、次のような独自の関数をセットアップする必要があります。
$yourString = "That\'s all\n folks";
function escapeString($string) {
return stripslashes(nl2br($string));
}
echo escapeString($yourString);
ドキュメントにはいくつかの良い例もありますnl2br()
編集 2
これらが表示される理由は、mysql が改行などをエスケープしているためですmysql_*
。関数を使用していると思います。mysqli
おそらくまたはを調べる必要がありますPDO
。
次に例を示します。
$yourString = "That's all
folks";
echo mysql_escape_string($yourString);
出力:
これで\r\nみんな
最初に、magic_quotes_gpc は ' や " などの文字をエスケープします。php.ini でこれを無効にすることもできます。ただし、クエリが「感染」しないように自分でエスケープする必要があります。詳細については、mysql インジェクションを参照してください。
エスケープされた文字列がデータベースに書き込まれたとき。文字列にはこれらのエスケープ文字が含まれておらず、それらを再度出力すると。必要に応じて結果が表示されるはずです。
私自身は、エスケープせずにすべてを保存し、出力するときにエスケープまたは表示する方法を好みます。を簡単に使用しstr_replace("\n", "", $text)
て、ニュースラインが表示されないようにすることもできます。
ご挨拶MRu