0

PHPを使用して@#$(いくつか説明する)のような特殊文字を含む変数をセッションとCookieに保存していますが、それらを取得すると、保存されたセッションとCookie変数に特殊文字が表示されません。よろしくお願いします.

                        //storing
                        $_SESSION['userid'] = $db_id;
            $_SESSION['email'] = $db_email;
            $_SESSION['password'] = $db_pass_str;
            setcookie("id", $db_id, strtotime( '+30 days' ), "/", "", "", TRUE);
            setcookie("email", $db_email, strtotime( '+30 days' ), "/", "", "", TRUE);
            setcookie("pass", $db_pass_str, strtotime( '+30 days' ), "/", "", "", TRUE); 

    //Retreivel
    if(isset($_SESSION["userid"]) && isset($_SESSION["email"]) && isset($_SESSION["password"]))
 {
    $log_id = preg_replace('#[^0-9]#', '', $_SESSION['userid']);
    $log_email = preg_replace('#[^a-z0-9]#i', '', $_SESSION['email']);
    $log_password = preg_replace('#[^a-z0-9]#i', '', $_SESSION['password']);
    // Verify the user`enter code here`

} 
else if(isset($_COOKIE["id"]) && isset($_COOKIE["email"]) && isset($_COOKIE["pass"]))
{
    $_SESSION['userid'] = $_COOKIE['id'];
    $_SESSION['email'] = $_COOKIE['email'];
    $_SESSION['password'] = $_COOKIE['pass'];
}

セッション変数をエコーすると、保存した特殊文字が表示されません。例: test@example.com を保存しましたが、表示すると、testexample.com しか表示されません。

4

1 に答える 1

2

元の文字列をエンコードするには、htmlspecialchars を使用します。例えば、

<?php
$session_variable = "hello@World#$%@";
$new = htmlspecialchars("<?php echo $session_variable; ?>", ENT_QUOTES);
echo $new; // output: hello@World#$%@
?>
于 2013-09-16T16:53:03.733 に答える