- ベストアンサー
PHP 特定の字の後に「\」が付く
PHPでメールフォームを作っております。 某ショップの予約フォームです。 その際、送信されたメールや入力した字、確認画面で出る字に「\」が付く場合があります。 全てではなく特定の感じの後に「\」の字が出てしまいます。 今のところ判明しているのは「表」や「予」という字です。 例)ご予約 → ご予\約 代表者指名 → 代\表者指名 このような感じです。 他の字は文字化けなどは無いのでS-JISなどの文字コードの誤りでは無いと思うのですが、 どなかたお分かりになる方いらっしゃいませんでしょうか? 何卒、宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
phpに限ったことではないのですが。 shift_jisの文字コードの中で、0x5Cで終わる文字コードがあります。 0x5Cは単体では「\」の文字コードです。 多くのプログラム言語で「\」は特別な意味をもちます。 例えば、 Don't という文字列を扱いたい場合 $str = 'Don't'; では不具合が生じます。 そこで $str = 'Don\'t'; と記述するとで、 途中にある 「'」を 文字列として扱いなさい という意味にすることができます。 この事を「エスケープする」といいます。 また、「\」そのものを文字として扱いたい場合は 例えば \50,000 という文字列を扱いたい場合 $yen = '\\50,000'; となります。 さて、質問にある問題に戻って 例えば 「予」 は 975C というコードです。 この後半の 5Cの部分が問題 phpには、入力フォーム等から入力されたデータ内に \ が含まれていた場合、勝手にエスケープする という設定があります 「magic_quotes_gpc」 と呼ばれるものです。 この設定がONの状態になっているために起こる現象です。 magic_quotes_gpc = Off と記述しましょう。 どこにどうやって記述するかは自力で調べてね。 ちなみに、 magic_quotes_gpcをオフ設定にした場合。 「意識してエスケープする必要がある」ということを覚えておきましょう。 例えば、入力された値をそのままSQL文などに組み込むと、SQLインジェクションの温床になりますよ。 例えば $sql = "SELECT * FROM table WHERE name = '".$_POST['name']."' "; とかやった場合。 入力フォームで aiueo' OR name != ' と入力されてしまった場合 出来上がるSQL文は SELECT * FROM table WHERE name = 'aiueo' OR name != '' と、なるため大変なことになります。
その他の回答 (2)
- tom233
- ベストアンサー率17% (61/352)
理由はS-JISだから。 Web系のプログラミングをやるならS-JISのダメ文字くらい知っていて当たり前のレベルの物。
- himajin100000
- ベストアンサー率54% (1660/3060)
マジッククオート
お礼
ご丁寧にありがとうございました。