• ベストアンサー

【PHP】文字をPOSTで飛ばすと「'」「"」「\」に「\」がつく

<form>で文字列を送信して「$_POST」で受信する場合、 「'」「"」「\」の前にのみ自動で「\」がついてしまいます。 (「'」「"」「\」→「\'」「\"」「\\」) これはなぜでしょうか? できれば\を付けないようにしたいのですが… お詳しい方、よろしくお願いいたします。 <環境> EUC-JP PHP4.4.4 <プログラム> <?php header('Content-Type: text/html; charset=EUC-JP'); header('Content-Language: ja'); mb_internal_encoding("EUC-JP"); $step = $_GET["step"]; $tx = $_POST["tx"]; if($step==''){ // ---- 初期画面 print "<form action='hoge.php?step=end' method='POST'>"; print " <input type='text' name='tx'>"; print " <input type='submit' value='ENTER'>"; print "</form>\n"; } if($step=='end'){ // ---- 受信画面 print "{$tx}"; } ?>

  • PHP
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
noname#49664
noname#49664
回答No.2

マジッククォート機能により、一部記号類がエスケープ処理されているためです。stripslashesで戻してください。 $step = stripslashes($_GET["step"]);

ikataro
質問者

お礼

できました! これは簡単でいいですね。 ありがとうございました!!

その他の回答 (1)

回答No.1

magic_quotes_gpcという設定をoffにしてしまえば解決されそうな気がします。 http://jp2.php.net/manual/ja/function.addslashes.php この辺のページに詳しく書かれていると思うので見てみてください。

ikataro
質問者

お礼

なるほど。 やはり自動で付加する機能があるのですね。 ありがとうございました。

関連するQ&A

  • PHPについて教えてください

    以下のコードでthanks.phpにemailとgoikenが表示されません なぜでしょうか? おそらくthanks.phpが間違えてると思いますが見直してもわかりません index.html <DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>PHP基礎</title> </head> <body> <form method="POST" action="check.php"> ニックネームを入力してください<br> <input name="nickname" type="text" style="width:100px"><br> メールアドレスを入力してください<br> <input name="email" type="text" style="width:200px"><br> ご意見を一言でお聞かせください<br> <input name="goiken" type="text" style="width:300px"><br> <input type="submit" value="送信"> </form> </body> </html> check.php <DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>PHP基礎</title> </head> <body> <?php $nickname=$_POST['nickname']; $email=$_POST['email']; $goiken=$_POST['goiken']; if ($nickname==''){ print'ニックネームが入力されていません<br>'; } else { print'ようこそ'; print $nickname; print' 様'; print'<br>'; } if ($email==''){ print'メールアドレスが入力されていません<br>'; } else { print'メールアドレス:'; print $email; print'<br>'; } if ($goiken==''){ print'ご意見が入力されていません<br>'; } else { print'ご意見『'; print $goiken; print'』<br>'; } if($nickname=='' || $email='' || $goiken=''){ print'<form>'; print'<input type="button" onclick="history.back()" value="戻る">'; print'</form>'; } else { print'<form method="post" action="thanks.php">'; print'<input name="nickname" type="hidden" value="'.$nickname.'">'; print'<input name="email" type="hidden" value="'.$email.'">'; print'<input name="goiken" type="hidden" value="'.$goiken.'">'; print'<input type="button" onclick="history.back()" value="戻る">'; print'<input type="submit" value="OK">'; print'</form>'; } ?> </body> </html> thanks.php <DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>PHP基礎</title> </head> <body> <?php $nickname=$_POST['nickname']; $email=$_POST['email']; $goiken=$_POST['goiken']; print $nickname; print'様<br>'; print'ご意見ありがとうございました<br>'; print'頂いたご意見『'; print $goiken; print '』<br>'; print $email; print'宛にメールを送信しました'; ?> </body> </html>

    • ベストアンサー
    • PHP
  • PHPのWebアプリ作成

    乱数で得た値を当てるというアプリを作っています。 <html> <head> <meta http-equiv="Content-type" content="text/html; charset=ISO-2022-JP"> <title>数あてゲーム</title> </head> <body> <h1>数あてゲーム</h1> <form action="numinput.php" method="POST"> <ul> <li>このゲームは、0から10までの間からランダムにひとつ選ばれた数が隠されています。 <li>当てるチャンスは3回あり、入力欄に数を入力してsubmit ボタンを押すと判定されます。 <ul> <input type="submit" value="スタート"/> <input type="hidden" name="ranum" value="rand(0, 10)"/> <input type="hidden" name="charenge" value="1"/> </form> </body> </html> <html> <head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <title>入力</title> </head> <?php $ranum = $_POST['ranum']; $charenge= $_POST['charenge']; ?> <body> <h1>入力</h1> <?php <form action="judge.php" method="POST"> <input type="text" name="num"/> <input type="submit" value="submit"> ?> </form> </body> </html> <html> <head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <title>判定</title> </head> <?php $ranum = $_POST['ranum']; $charenge = $_POST['charenge']; $num = $_POST['num']; ?> <body> <h1>判定</h1> <?php if(!is_numeric($num)) { print("数値以外が入力されました.<br/>"); print("<a href=\"numinput.php\">入力ページ</a>からやり直 してください"); }else if($num == $ranum){ print("あたりです。"); }else if($num != $ranum && 3 > $charenge){ print("はずれです。 <br/>"); print("<a href=\"numinput.php\">入力ページ</a>からやり直 してください"); $charenge = $charenge + 1; }else{ print("はずれです。 <br/>"); print("正解は $ranum です"); } ?> </body> </html> この3つを組み合わせて作っていますが、 スタートを押してnuminput.phpに行こうとすると Parse error: syntax error, unexpected '<' in ~/numinput.php on line 13と出て先に進めません。どなたか解決方法を教えていただけませんか? また、乱数の受渡しがちゃんとできているのでしょうか?

    • ベストアンサー
    • PHP
  • POSTメゾットでの値の受け渡しについて

    フォームからの値の受け渡しについて質問いたします。 <form ction="test.php" method="POST">   <input type="text" name="text">   <input type="submit" value="検索"> </form> で渡されたtextを下記スクリプトで受け取れません。 ====testphp==== <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> </head> <body> <? print ".$_POST['text']."; ?> </body> </html> ========== ただ気になることがあり、このファイル達が置かれているディレクトリの.htaccessに <Limit GET POST> require valid-user </Limit> の記述があります。 このディレクトリはメンバー制限をかけているディレクトリですが、 メンバーとしてこのディレクトリのTOPページに入り、 検索フォームを入力してsubmitしても値はブロックされるものでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPをはじめて1日目なので・・・

    参考書を見ながらPHPの勉強を始めていますが、本のサンプルと全く同様にコーディングしているはずなのに、良い結果が得られずバグとなります。 formとpostを使って内容を渡すという項目なのですが。 form.htmlの内容。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <form method="post" action="form1.php"> 好きな食べ物は?<input type="text" name="food1"><br> 好きな飲み物は?<input type="text" name="food2"> <input type="submit" value="送信"> </form> </body> </html> form1.phpの内容 <?php header('Content-type: text/html; charset=UTF-8'); ?> <html> <body> <?php $f1 = $_POST['food1']; $f2 = $_POST['food2']; $f1 = htmlentities( $f1, ENT_QUOTES, 'UTF-8' ); $f2 = htmlentities( $f2, ENT_QUOTES, 'UTF-8' ); echo 'あなたは「', $f1, "」が好きなんですね。<br>\n"; echo '「', $f2, "」も好きなんですね。<br>\n"; ?> </body> </html> おそらくちょっとしたことが原因でエラーが出ているのだと思いますが、まだ始めて1日目なので、どこがいけないのかさっぱりわかりません。 一体どこがおかしいのか、教えていただけますか?

    • ベストアンサー
    • PHP
  • PHPがHTMLのformの値を受け取らない

    状況: ファイルアップロードを作成しようとしたところPHPがHTMLのformのsubmitした物を受け取らない。 しかしHTML側にjavascriptを読み込ませ XMLHttpRequest によってsendすると受け取れる。 環境: apache 2.2.4 php 5.2.3 ------------HTML <html><body> <form action="test.php" enctype="multipart/form-data"> <input type="text" id="name"> <input type="file" id="file"> </form> </body></html> ------------PHP <?php header('Content-type: text/plain; charset=UTF-8'); print "\$_POST:";var_dump($_POST);print "\n"; print "\$_FILES:";var_dump($_FILES);print "\n"; ?> ------------結果 $_POST:array(0) { } $_FILES:array(0) { } ------------ 原因がphp.iniなのか、httpd.confなのか、はたまたそれ以外に原因があるのかがさっぱり判らず質問しました。 どうやったらHTMLのformの値をPHPで受け取れますか?

  • phpそのよん

    <h1>PHPのテストです</h1> <form action="1.php" method="POST"> <p><input type="text" size="20px" name="ad1"></p> <p><input type="text" size="20px" name="ad2"></p> <p><input type="submit" value="送信"></p> <?php $ad1=$_POST["ad1"]; if($ad1==""){ print"違う"; } else{ print"合格"; print"様"; } ?> とやったんですが、まったく反応がありませんでした。 どこがいかんのでしょうーか?

    • ベストアンサー
    • PHP
  • PHP・MYSQL超初心者です。

    PHP・mysql初心者です。掲示板を自分で考えて作っているのですが、 わからないところがあります。PHPを勉強してから、まだ月日が 経っていないので基本的なことでつまづいています。 登録画面で氏名・年齢を入力し、登録をクリックするとmysqlに データが保存され、そのデータを一覧で表示させたいです。 つまづいている所です。 1)mysqlにデータを保存する所 2)no・氏名・年齢をテーブルで表示する所 (noは自動的に1~順に振りたいのですが) 実用的ではないかと思われますが、宜しくお願い致します。 サイトや書籍で探しては見たのですが、基本的なことだと思う ので、あまり詳しく載っているのがなく困っています。 どなたかご教授下さい。 *form.html <html> <meta http-equiv="content-type" content="text/html; charset=euc-jp"> <body> <form method="post" action="form.php"> 氏名:<input type="text" name="simei"><br> 年齢:<input type="text" name="tosi"><br> <input type="submit" value="登録"><br> </form> </body> </html> *form.php <html> <meta http-equiv="content-type" content="text/html; charset=euc-jp"> <body> <? $simei=$_POST["simei"]; $tosi=$_POST["tosi"]; $db=mysql_connect("サーバーアドレス","ユーザー名","パスワード") or die("接続失敗"); print("デ―タベースサーバーに接続できました<br>"); mysql_select_db("データベース名")or die("データベースが見つかりません".mysql_error()); print("データベースに接続しました<br>"); //ここから下の記述方法がわかりません $a="insert into mihon_list(simei,tosi)values('$simei','$tosi');"; mysql_query($a)or die("命令が違います"); ?> 登録しました! </body> </html> *itiran.php <html> <meta http-equiv="content-type" content="text/html; charset=euc-jp"> <body> <table width=70% border> <tr><th>no</th><th>氏名</th><th>年齢</th></tr> </table> </body> </html>

    • ベストアンサー
    • PHP
  • PHPでメールを送信するには

    PHP超初心者です。 参考本をもとにPHPでメールを送信するということにチャレンジしているのですが、次のような文章が出ます。 Warning: mb_send_mail() [function.mb-send-mail]: "sendmail_from" not set in php.ini or custom "From:" header missing in C:\Program Files\Apache Group\Apache2\htdocs\php10\mail.php on line 11 エラー:送信に失敗しました 参考本に書いてあるとおり、 php.iniのSMTP=localhost を自分が使っているoooooo@ocn.ne.jpに書き換え、sendmailには自分の別アドレスを記述したのですが。 11行目のエラーも何を指しているのかわかりません。 ご回答よろしくお願いします。 【mail.php】 <html> <head><title>mail.php</title></head> <body> <?php $address=$_POST['address']; $subject=$_POST['subject']; $message=$_POST['message']; $header="Content-Type:text/plain;charset=iso-2022-jp"; mb_language("Japanese"); if(mb_send_mail($address, $subject, mb_convert_encoding($message,"JIS","EUC-JP"),$header)){ print("送信完了しました。"); }else{ print("エラー:送信に失敗しました"); } ?> </body> </html> 【mail_form.html】 <html> <head><title>メールの送信</title></head> <body> <h2>メールの送信</h2> <form action="mail.php" method="post"> 宛先:<input type="text" name="address"><br /> 件名:<input type="text" name="subject"><br /> 本文:<br /><textarea name="message" rows="5" cols="30"></textarea><br /> <input type="submit" value="送信"> </form> </body> </html>

    • ベストアンサー
    • PHP
  • POSTされない

    xamppにてローカル環境でやっているのですがなぜか type="file"だけPOSTされません。 ie6とfairefox3で試しましたが取得できませんでした。 調べてみたのですが同様の事例が見つからずわからかったのですが これは何が原因なのでしょうか? ---html--- <form action="index.php" method="post" enctype="multipart/form-data"> <input type="text" name="name" /> <input type="file" name="img" /> <input type="submit" name="send" value="送信する" /> </form> ---php--- if (isset($_POST['send'])) { echo '<pre>'; print_r($_POST); echo '</pre>'; } print_r($_FILES);を試すと正常に値が表示されます。全く意味不明 なのですが何かセキュリティ上の問題などが原因なのでしょうか?

    • 締切済み
    • PHP
  • フォームで送った文字がおかしくなる

     フォームから文字を記入して、送信ボタンを押すと次のページでその文字が表示されるという初歩的なプログラムをつくっています。しかし、フォームからPOSTでデータを送る場合、ある特定の一文字の漢字だけを記入して送信ボタンを押すと正常に表示されません。 例えば、「卒業」だと正常に表示されるのに「卒」だと「'」になってしまい、他にも「文」や「動」を一文字だけ記入すると、何も表示されません。ひらがなやカタカナ、複数文字の場合は全て正常です。原因が分からなくて困っています。 a.php (入力フォーム) <HTML> <HEAD> <TITLE>テキスト送信のテスト </TITLE> <META http-equiv="Content-Type" content="text/html; charset=EUC_JP"> </HEAD> <BODY> <FORM method="POST" action="view.php"> 入力してください: <INPUT type="text" name="name"> <BR> <INPUT type="submit" value="送信"> </FORM> </BODY> </HTML> view.php (表示するphpファイル) <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=EUC_JP"> <META http-equiv="Content-Style-Type" content="text/css"> </HEAD> <BODY> <?php print $_POST["name"]; ?> </BODY> </HTML> どこか間違いがあるでしょうか? a.phpとview.phpは両方とも日本語(EUC)改行=LFで保存しています。 phpのバージョンは5.1.1です。よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう