• ベストアンサー

PHP 特定の字の後に「\」が付く

PHPでメールフォームを作っております。 某ショップの予約フォームです。 その際、送信されたメールや入力した字、確認画面で出る字に「\」が付く場合があります。 全てではなく特定の感じの後に「\」の字が出てしまいます。 今のところ判明しているのは「表」や「予」という字です。 例)ご予約 → ご予\約 代表者指名 → 代\表者指名 このような感じです。 他の字は文字化けなどは無いのでS-JISなどの文字コードの誤りでは無いと思うのですが、 どなかたお分かりになる方いらっしゃいませんでしょうか? 何卒、宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.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 != '' と、なるため大変なことになります。

tomoticks
質問者

お礼

ご丁寧にありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • tom233
  • ベストアンサー率17% (61/352)
回答No.2

理由はS-JISだから。 Web系のプログラミングをやるならS-JISのダメ文字くらい知っていて当たり前のレベルの物。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

マジッククオート

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PHPのコードをUTF-8に変換したい。

    なんとかメールフォーム設置までこぎ着けたのですが、届いたメールが文字化けしてしまいます。HTMLの文字コードがUTF-8、PHPの文字コードがshift-jisなので原因はそこだと考えたのですがPHP内のshift-jis表記をUTF-8に変えるとPHP内で文字化けが起こってしまいます。 MultiTextConverterなどのアプリケーションを使っても同様の文字化けが起こります。 どうすればいいのか分かりません。 よろしくお願いします。

    • 締切済み
    • PHP
  • PHPフォームからのメール送信内容の一部が文字化けしています

    こんにちは。PHP初心者の者です。 大変困っているのですが、PHPで作成したエントリーフォームより送信ボタンを押下すると、入力データがメールに届く機能を作成したのですが、 本文の一部分が文字化けしてしまいます。   正しい → 月給25万円   誤り  → 月・u梛・5万円 など 原因が全く分かりません。 お分かりになる方、助けてください。。。 ちなみに文字コードなどの設定ですが、 mb_language("Japanese"); mb_internal_encoding("Shift_JIS"); $body = mb_convert_encoding($body, "JIS");      ・・・ mb_send_mail($email_to,$email_sub,$body,$header) という感じです。 よろしくお願いします。

    • 締切済み
    • PHP
  • SJISのダメ字について

    php4、postgres8でデータベース登録をしています。 server_encoding、client_encoding共に SQL_ASCIIです。 フォームから受け取った文字列をDBに書き込むと 特定文字だけ文字化けします。 ダメ字といわれる文字です。 文字化けしないようにINSERTするには どうしたらよろしいのでしょうか?

    • ベストアンサー
    • PHP
  • PHPについて質問させてください。

    PHPについて質問させてください。 レッツPHP!さんの「-UpdaterRSS-」を使用したいのですが、 http://php.s3.to/simple/#update 以前はロリポップで全く問題なく動作していたのですが、 XREAサーバーに変えたらPHPで文字化けをしてしまいます。 http://www.value-domain.com/ また、他PHPのメールフォームも同様に文字化けしてしまいます。 原因がわからないのでよろしくお願いいたします。

  • 文字化けにどう対処したら・・・PHPをShift_JISで書いて、MYSQLに格納しました

    最初からEUCで書けばよかったのでしょうが? 知識が無くて、全部Shift_JISで書きました。 (文字化けをなめていました。。) 結構、文字化けすることが多くて修正するしかなくなってきましたが 全部書き直さずに改良するにはどうしたらいいでしょうか? PHP Version 4.4.2 MYSQL 4.0.26 にデータはきちんとShift_JISで入っているようです。 **phpmyadminでShift_JISで表示させるとちゃんと表示します、  それ以外で表示させると文字化けします。 フォームを使って、MYSQLに格納して 後で、呼び出して表示するだけです。 どうか宜しくお願いいたします。 相変わらず、要領の得ない質問でスミマセン。

    • ベストアンサー
    • PHP
  • php自動返信メール本文の一部の文字化け

    phpでメールフォームを作成したのですが、自動返信のときの本文の一部が文字化けしてしまいます。 全体が文字化けではなくて一部で、どう対処していいかわからないです。 すいませんがお教えいただけないでしょうか? フォームもphpも文字コードEUCです。 文字化けする本文は 「本メールの最下段にお控えが記載してございます。」 という部分です。 メール送信部分のソースは $rebody=mb_convert_encoding($rebody,"JIS","EUC-JP"); if (get_magic_quotes_gpc()) { $rebody = stripslashes($rebody); } $resbj="=?iso-2022-jp?B?".base64_encode(mb_convert_encoding($resbj,"JIS","EUC-JP"))."?="; $reheader="From: $to\nReply-To: ".$to."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion(); です。 今悩んでて3時間ぐらいいろいろ試したのですがダメでした。 すいませんがよろしくお願いします。

    • 締切済み
    • PHP
  • メール送信プログラムで特定文字の文字化け

    PHP初心者です。メール送信プログラムを作成しました。 色々調べて、 //表・予・申・能・十・ソなど特殊漢字の後につく\マークを削除 変数 = stripslashes(変数); でエンマークはとれたのですが、また新たな問題が発生してしまいました。 例えば、山本という名前でフォーム入力すると本という文字が文字化けしてしまいました。送信者名は文字化けしていないのにメールの中身の本という文字が文字化けしてしまいました。どなたか助けてください。

    • ベストアンサー
    • PHP
  • PHPの5Cに関する文字化け

    またまた文字化けの件で質問です。 Shift_Jisで書いたPHPでMysqlのデータベースにupdateしています。 $sql .= "UPDATE abc SET"; $sql .= " a= '".addslashes($a)."'"; のようなSQL文です。 このような場合 フォームから「表示」を送信した場合は 「update abc SET a='表\示'」となり正常に更新されます。 しかし最後に5Cの文字ある場合 「update abc SET a='テーブル表\'」となり '(シングルクォーテーション)がエスケープされて エラーになってしまいます。 そのような場合はどうしたらよいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPのsendmailでの文字化けについて

    PHPのsendmailでの文字化けについて PHPのsendmailをしています。 ソースの概略は以下のような感じです。 mb_language("Japanese"); mb_internal_encoding("SHIFT-JIS"); mb_send_mail($to, $subject, $body, $header); 質問1 (1)とか(株)などの特殊文字を送信すると?に変換されます。 それは良いのですが、PHPのsendmailによるメール送信の 定石としては、そのまま送信して?に変換されるのが良いのでしょうか? それとも、何かの文字に変換して送信する。だとか 送信前にチェックして、警告を出すべきなのでしょうか? 出来れば方法論とソースも教えて頂きたく存じます。 質問2 全角で493文字以上の本文を送信すると、493文字以降が 文字化けしてしまいます。何か文字数制限みたいなものがあるのでしょうか?

    • ベストアンサー
    • PHP
  • PHPフォーム→PHP確認画面で、文字化け

    PHPでHTMLのフォームを吐き出し、そこから、PHPの確認画面に移行する際、文字化けが発生するのですが、どうしたらよいでしょうか?

    • ベストアンサー
    • PHP