¥¥のように2文字だとエラーは出ませんが登録された内容をHTMLにて読み込むと¥が1文字しか表示されません。
ちなみにテキストエリアに下記のデータを入力してHTML上で読み込んでみました。
¥test →estと表示
¥あいう →「あいう」と表示
初心者の為なぜこのような事になるのか分かりません。よろしくお願いします。
¥(バックスラッシュ)はSQL上で特別な意味を持ちます。
そのためそのままSQL文として使用してしますと意図しない動作になるはずです。
回避には mysql_real_escape_string 等の関数を使うと良いようです。
http://phpspot.net/php/man/php/function.mysql-real-escape-string...
なお、適切なエスケープ処理を行わなかった場合SQLインジェクションという脆弱性になりえます。
SQLインジェクションについては以下を参照してください。
http://www.atmarkit.co.jp/fsecurity/rensai/webhole02/webhole01.h...
http://www.php.net/manual/ja/security.database.sql-injection.php
¥(バックスラッシュ)はSQL上で特別な意味を持ちます。
そのためそのままSQL文として使用してしますと意図しない動作になるはずです。
回避には mysql_real_escape_string 等の関数を使うと良いようです。
http://phpspot.net/php/man/php/function.mysql-real-escape-string...
なお、適切なエスケープ処理を行わなかった場合SQLインジェクションという脆弱性になりえます。
SQLインジェクションについては以下を参照してください。
http://www.atmarkit.co.jp/fsecurity/rensai/webhole02/webhole01.h...
http://www.php.net/manual/ja/security.database.sql-injection.php
ご指摘のようにエスケープ処理にて解決しました。ありがとうございました。
文字の中には特別な意味を持つ文字が存在します。
'や"。\などもそうです。
しかしそうでは無くただ単に文字としたい場合に逆にそれを示す必要があります。それを示す文字が\です。
\aのように書くとaに何もするな(aそのもの)ということになります。
また逆にエスケープ文字といって\nはnそのものということではなく改行(0x0a)を意味します。
同じく\tはタブを意味します。ですから\testはタブ文字とestということになります。
\あいうの\あはあそのものと言うことになり、その後にいうが続くかたちになりあいうとなります。
\\は\をそのままという意味なので\だけになります。
このように文字列の中に特殊な意味を持つ文字が含まれていた場合、問題が起こる場合があるのでそれらの文字を無効(\を付加する)にするhttp://manual.xwd.jp/function.addslashes.html]addslashes()というのがあります。逆に戻すのがstripslashes()です。
PHPということはhtmlを出力するのでしょうからそれならhtmlspecialchars()で無害化したほうがいいように思います
大変参考になりました。ありがとうございました。
SQLについてはb-windさんが書かれていらっしゃいますので以下の点について。
¥test →estと表示
¥あいう →「あいう」と表示
上記は¥が全角で書かれていますが、本来は半角でしたでしょうか?この場合、「\t」「est」といった具合に解釈された可能性があります。
「\t」を文字列中などで使用すると、PHPやその他のプログラム言語でたいていの場合「(水平)タブ」を意味しています。同様に「\n」と書くと改行を意味することになるため
\next
と書くと
(改行)
ext
と表示されます。
回避方法は「\\test」などのように、\をエスケープしてやればOKです。
ご指摘のようにエスケープ処理にて解決しました。ありがとうございました。