• 締切済み

Cookieとhtmlspecialchars

前回setcookieについて質問したのですが、どうしても出来ないのでまた質問させてください。 前回の質問↓↓ http://okwave.jp/qa/q7319771.html htmlspecialcharsを使い、form2.phpで「&」の表示は出来ましたが、form.phpではどのようにやっても出来ませんでした。 記憶されたCookieの値にhtmlspecialcharsを適用するにはどのようにすれば良いのでしょうか。 setcookie(htmlspecialchars("city", "・・・ にしてもダメでした。 また、前回教えてもらった「自分で$_COOKIEも書き替えるか、($_COOKIEでなく)$_SESSIONを使うとかの工夫が必要です。」の方は全然手付かず状態です。 出来ましたらこちらも含め、簡単でよろしいですのでソースでお願いしたいです。 お願いします。

  • PHP
  • 回答数1
  • ありがとう数0

みんなの回答

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

>記憶されたCookieの値にhtmlspecialcharsを適用する Cookieに記録するときにはhtmlspecialcharsは要りません。その値を「表示する(ブラウザにhtmlソース内の文字列として返す)」ときにhtmlspecialcharsしてください。 #マニュアルにもそう書かれているハズです http://php.net/manual/ja/function.htmlspecialchars.php それ以外の場所でhtmlspecialcharsを使ってはいけません。厳密に「ダメ」ということではありませんが、間違いの元です(複数回実行してはいけないので)。 >自分で$_COOKIEも書き替えるか、($_COOKIEでなく)$_SESSIONを使うとかの >工夫が必要です。」の方は全然手付かず状態です。 session_startしておいて、SESSION変数を使うだけでいいのですが・・・ http://www.php.net/manual/ja/session.examples.basic.php

haine_0424
質問者

補足

回答有難う御座います。 form2ですが、このように書きましたが表示されません。 (前回表示されたと言ったのは、POSTから直接表示させた場合でした) お願いします。 【form2.php】 <?php if ($_POST) { $city1 = $_POST["p1"]; $city2 = $_POST["p2"]; $city_name1 = $_POST["name1"]; $city_name2 = $_POST["name2"]; setcookie ("city", "set1=$city1&set2=$city2",time()+3600*24*90); setcookie ("city_name", "set_name1=$city_name1&set_name2=$city_name2",time()+3600*24*90); } parse_str($_COOKIE["city"]); parse_str($_COOKIE["city_name"]); echo htmlspecialchars($set_name1); echo htmlspecialchars($set1); echo htmlspecialchars($set_name2); echo htmlspecialchars($set2); ?>

関連するQ&A

  • PHPでのCookie

    PHPでクッキーを使い、下記のような入力フォームを作りました。 form.phpで入力→form2.phpで正常出力出来るのですが、 form2.phpで一度更新しないと、結果が画面に表示されません。 これをform2.phpを開いた時点で表示されるようにするには、どのように書けばいいのでしょう。 後1つあります。form.phpで 「テスト&1」と書くと「テスト」としか表示されなく、&とそれ以降が記憶されません。 これはなぜでしょうか? お願いします。 【form.php】 <?PHP parse_str($_COOKIE["city"]); parse_str($_COOKIE["city_name"]); ?> <html> <form method="post" action="form2.php"> <?PHP echo "名前1<input type=text name=name1 maxlength=16 size=12 value=$set_name1> <BR>ID<input type=text name=p1 maxlength=8 size=6 value=$set1><BR><BR>"; echo "名前2<input type=text name=name2 maxlength=16 size=12 value=$set_name2> <BR>ID<input type=text name=p2 maxlength=8 size=6 value=$set2>"; ?> <input type="submit" value="実行"> </form> </html> 【form2.php】 <?php if ($_POST) { $city1 = $_POST["p1"]; $city2 = $_POST["p2"]; $city_name1 = $_POST["name1"]; $city_name2 = $_POST["name2"]; setcookie ("city", "set1=$city1&set2=$city2",time()+3600*24*90); setcookie ("city_name", "set_name1=$city_name1&set_name2=$city_name2",time()+3600*24*90); } parse_str($_COOKIE["city"]); parse_str($_COOKIE["city_name"]); echo $set_name1; echo $set1; echo $set_name2; echo $set2; ?>

    • ベストアンサー
    • PHP
  • COOKIEを用いたセッション管理

    PHPでCOOKIEを用いたセッションチェックをしようとしています。 トップページを表示する関数とセッション管理の関数に分けて処理をしています。 function index(){ session_start(); if($this->CheckSession()) ログインのページ else ログオフのページ } function CheckSession(){ if(!$_COOKIE["hoge"]) DBにセッションID(COOKIE["hoge"]の値)を入れる setcookie("hoge",session_id()); return false; else  return true; } このとき更新ボタンを押すたびにCOOKIEの値が変わります。 なぜでしょうか?

    • ベストアンサー
    • PHP
  • phpでのCookieのパスの書かれ方

    phpの初心者なのですが、Cookieでうまく情報の引き渡しができないので、アドバイス頂けないでしょうか? test1でCookieを初期設定した後に、Cookieを使ってtest2を呼び出し、 test2上で設定し直した値でCookieを書き変えてtest2を再呼び出ししています。 再呼び出しした時のCookieが読めないので、ブラウザを調べてみると、yyという名前のクッキーが2つ存在しているためだと判りました。値は確かに置き変わっているのですが、パスが違っているので読み出せないようです。 初期設定した時のパスは /tst/  → test1.phpでsetcookieで設定したもの 再設定した時のパスは /  → test2.phpの中のJavascriptで設定したもの になっていました。 ▽test1.php (/svr1/tst/) setcookie("yy",$yy,0,"./"); (略) header("HTTP/1.1 301 Moved Permanently"); header("Location: test2.php"); ▽test2.php function set_Cookie() { yy = parseInt(document.f1.ck_yy.value); document.cookie = "yy=" + yy + "; path=/"; return true; } <php? $yy = $_COOKIE['yy']; ?> <form name="f1" action="test2.php" method="post"> <input name="yy">  <input type="submit" value="実行" onClick="set_Cookie()">   </form> setcookie の引数であるパス名を最初は省略していたのですが、/tst/というパスが入ってきてしまうため、パス名をあえて ./としてみたのですが結果は同じでした。 ちなみにtest1の呼び出し元は別のサーバーで以下のように呼びだしています。 ▽test0.html (/svr0/wwwroot/) <a href="http://svr1/tst/test1.php">test1</a> パス名はどのように決まるのでしょうか?

    • ベストアンサー
    • PHP
  • Cookieをリセットしたい

    Cookieをいったんリセットしてゼロの状態からまたはじめたいと思っています。 クライアントが持っているCookieの値を削除したい場合、過去のタイムスタンプを利用すると書かれていましたが、下記のようにサーバー側(phpのプログラム側)でCookie名を変更するだけではダメなのでしょうか? setcookie("TestCookie", $value); ↓ setcookie("TestCookienext", $value); ためしにテストしてみたのですが問題なさそう(?)だったのですが、何か問題あるのでしょうか。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • COOKIEを用いたセッション管理について

    input.phpでsetcookieを使ってcokkieを設定します。 有効期限は1時間です。 check.php→thanks.phpという流れで登録を行い、thanks.phpでcookieを破棄します。 リロードを行ったときにCOOKIEがないのでエラー処理が行われます。 check.phpに直接アクセスしたときもcookieがない場合はエラー処理を行います。 ここまではいいのですが、input.phpにアクセスしたときにthanks.phpで破棄したcookieがまだ生きているのです。 ここで新たにcookieを発行して新しいsessionを開始したいのですが、うまくいきません。 どのようにしたらいいのでしょうか? 1時間たたないうちにユーザが登録をしようとするとcookieの情報を元に更新されてしまいます。

    • ベストアンサー
    • PHP
  • PHPにおけるCookieの挙動について。

    PHPにおけるCookieの挙動について。 PHPには今回初めて触れるのですが…。 PHPでCookieを使ったプログラムを作っていたところ、「Cookieに値を保存することはできている(ブラウザの機能でCookieの一覧を確認したところ、意図した通りの名前で意図した値が保存されていました)のに取り出すことができない」という事態にはまってしまいました。 プログラムは以下の通りです。 -------------------------------- ・TestCookieIn.php <?php require_once "./TestCookieVariable.class.php"; ?> <html> <head> <title></title> </head> <body> <form action="./TestCookieOut.php" method="POST"> <input type="text" name="NAME" size="30" value="<?php print($_COOKIE[TestCookieVariable::COOKIE_NAME]); ?>"/><br/> <input type="submit" value="Exec." /> </form> </body> </html> -------------------------------- ・TestCookieOut.php <?php require_once "./TestCookieVariable.class.php"; setCookie(TestCookieVariable::COOKIE_NAME, $_POST['NAME'], time() + (60 * 60 * 24 * 7)); ?> <html> <head> <title></title> </head> <body> <?php print($_POST['NAME']); ?> <a href="./TestCookieIn.php">前の画面に戻る</a> </body> </html> -------------------------------- ・TestCookieVariable.class.php <?php class TestCookieVariable { const COOKIE_NAME = 'TestCookieVariable.COOKIE_NAME'; } -------------------------------- 確かにsetCookieや$_COOKIEのパラメータにクラス定数を使用するというトリッキー(?)なことはやっていますが、保存はできるのに読み出しができないというのが、色々調べたのですがよく分かりません。 詳しい方いらっしゃいましたら、どうかご教授下さい。 ちなみに環境は、Windows Vista Home Premium(SP2)+xampp for Windows 1.7.3です。 どうか宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHP cookieの値が更新されないときがある

    setcookie()を使ってcookieの値を更新したのですが、反映されない時があります。 クッキーに自作のセッションIDみたいなIDを保管して、そのIDを訪れる度に更新しようとしています。セッションIDなら session_regenerate_id();を使うと、更新されますよね?それと同じように自作IDに関しても、更新したいと思っています。 クッキーがうまく更新されていない時もsetcookie()の戻り値はtrue (1)です。どうしたら、session_regenerate_id();みたいにIDを更新して、反映させることができますか?

    • ベストアンサー
    • PHP
  • phpのsessionとcookieについて

    質問は以下に2つです。 プログラムの説明は、pass,idから認証を行い、sessionidを発行します。二度目の以降はsessioidから認証します。 sidpost.phpからpostでIDとパスワードを入力させます。 データベースはid, pass, sidの3つのカラムがあります。 <?PHP require_once'DB.php'; session_name("sid"); session_start(); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <?php $id = $_POST['id']; $pass =$_POST['pass']; $cookie = $_COOKIE['sid']; $sid = session_id(); //データベース参照 //プレースホルダーを使用 //id からpassを参照する //cookie から sidを参照する $data=$sth->fetchRow(DB_FETCHMODE_ASSOC);//参照したデータを$dataの連想配列に格納 //sid保存のプレースホルダー $sth2 = $dbh->prepare('UPDATE accountid SET sid=? WHERE id=? AND pass=?'); //cookieが保存されていない場合 if(!isset($cookie) && isset($pass) && isset($id)){ //idとpassから認証 if($pass === $data['pass']){ $sth2 = $dbh->execute($sth2, array($sid, $id, $pass)); echo "初めてのログインsid登録"; } //sidがある場合cookieとデータベースのsidを比較 }else if(isset($cookie)){ if($cookie == $data['sid']) echo "sidあり成功"; //クッキーがあり、データベースと一致しない場合,sidを破棄する }else{ echo"あるはずのクッキー" .$COOKIE['sid']."<br>"; $_SESSION=array(); setcookie('sid', '', time()-3600); session_destroy(); echo "ないはずのクックキー".$_COOKIE['sid']; } //それ以外は入力フォームにリダイレクト }else{ header("location: ./sidpost.php?error=error"); } $dbh->disconnect(); ?> </body> </html> 上のようなセッション管理のプログラムを書きました。 質問は2つありまして、 ・1つめは、通常セッション管理を行う際の、条件はどのようにするのが一般的ですか? IDとパスワードがデータベースと一致する場合としない場合の2通り、cookieがある場合、ない場合の2通り、もしcookieがある場合は、データベースの値と一致する場合としない場合の2通りが考えられます。一番最適な条件文はどのようにすればよいでしょうか? またその処理はどのようにすればよいのでしょうか。 例えばcookieがあり、データベースと一致しない場合、$_SESSIONの初期化、setcookieでクッキーの削除、session_destroy()するなど。。。なにかよくわからなくなってしまいました。 ・二つ目は、 上のプログラムではじめsession_name('sid')およびsession_start()を宣言し、クライアントとサーバに$sid=session_idを発行しています。なので、$_COOKIE['sid'];の値には session_id()($sid)になっているはずです。 下のほうで、セッションの管理を行う際、 //クッキーがある場合 else if(isset($cookie)){ if($cookie == $data['sid']) echo "sidあり成功"; //クッキーがあり、データベースと一致しない場合,sidを破棄する }else{ echo"あるはずのクッキー" .$COOKIE['sid']."<br>"; $_SESSION=array(); setcookie('sid', '', time()-3600); session_destroy(); echo "ないはずのクックキー".$_COOKIE['sid']; } クッキーがあり、データベースと一致しない場合に、sessionおよび、cookieの破棄をしています。この前後でechoをもちいて$_COOKIE['sid']の値を出力すると、 破棄するの前のechoでクッキーが表示されず、 破棄したあとのechoでクッキーが表示されました。 なぜこのような結果になるのですか、逆では?と思いました。

    • 締切済み
    • PHP
  • PHPでのクッキー

    PHPでクッキーを使い、下記のような入力フォームを作りました。 form.phpで入力→form2.phpで正常出力出来るのですが、 直接form2.phpへ飛ぶと、クッキーの値がなくなってしまいます。 setcokkieが、何の値もないのを上書きしていることは理解できるのですが、これを上書きせず回避?する方法はありますでしょうか? よろしくお願いします。 【form.php】 <?PHP parse_str($_COOKIE["city"]); parse_str($_COOKIE["city_name"]); ?> <html> <form method="post" action="form2.php"> <?PHP echo "名前1<input type=text name=name1 maxlength=16 size=12 value=$set_name1> <BR>ID<input type=text name=p1 maxlength=8 size=6 value=$set1><BR><BR>"; echo "名前2<input type=text name=name2 maxlength=16 size=12 value=$set_name2> <BR>ID<input type=text name=p2 maxlength=8 size=6 value=$set2>"; ?> <input type="submit" value="実行"> </form> </html> 【form2.php】 <?php $city1 = $_POST["p1"]; $city2 = $_POST["p2"]; $city_name1 = $_POST["name1"]; $city_name2 = $_POST["name2"]; setcookie ("city", "set1=$city1&set2=$city2",time()+3600*24*90); setcookie ("city_name", "set_name1=$city_name1&set_name2=$city_name2",time()+3600*24*90); parse_str($_COOKIE["city"]); parse_str($_COOKIE["city_name"]); echo $set_name1; echo $set1; echo $set_name2; echo $set2; ?>

    • ベストアンサー
    • PHP
  • PHP cookie受け渡しについて

    php 5.16 apache 2.0 フォーム -------------------------------------------------------------- <form method="POST" action="./php_cookie_tm.php"> E-Mail<br> <input type="text" name="mail" value="<?php print($_COOKIE['form_email']); ?>"><br> <input type="submit" value=" 保存 "> </form> -------------------------------------------------------------- 出力 -------------------------------------------------------------- <?php setcookie("form_email",$_POST['form_email'],time()+(60*60*24*90)); ?> クッキー保存 -------------------------------------------------------------- とすると Warning: Cannot modify header information - headers already sent by (output started at C:\Program Files\○○.php:4) in ・・・・・・・ というエラーがでます。 既に発信している?みたいなエラーなのですが・・・・ なぜでるのでしょうか? php.iniの設定?等いろいろみてはいるのですが、原因不明にて すごい困っております。 初心者質問ですいません。

    • ベストアンサー
    • PHP