为了阐明前面发布的备注
Cookie 名称中的点 (.) 和空格 ( ) 将被替换为下划线 (_)。
通常情况下,$_COOKIE 的值与 $_SERVER["HTTP_COOKIE"] 中的值并不相同!
在 phpinfo() 中,$_SERVER["HTTP_COOKIE"] 以 7 位显示浏览器存储在 Cookie 中的实际值。
在 $_COOKIE 中,此值经过 7 位到 8 位的转换。
当 $_SERVER["HTTP_COOKIE"] 中的所有字符都为 ASCII(7 位)时,将在 phpinfo() 中显示 $_COOKIE。如果单个字符不是 ASCII,则 phpinfo() 不显示任何值!
尽管 $_COOKIE 中仍然是 $_SERVER["HTTP_COOKIE"] 的 8 位转换!
原因:仅 8 位转换不足以说明字符的含义。
为此需要使用的字符集。
phpinfo() 不知道字符集,最好什么也不说。
在 PHP 生成的网页中使用 $_COOKIE 时,环境具有所用字符集的信息,因此可以显示所需的字符。
三个说明性示例
===========================
使用 HTML 表单获取要存储在名为“test”的 Cookie 中的内容。
字段“test”中的输入字符串:door
$_SERVER["HTTP_COOKIE"]:test=door
$_COOKIE["test"]
在 phpinfo() 中显示:door
在任何 html 页面中显示:door
字段“test”中的输入字符串(表单中使用 ISO-8859-1):Tür
$_SERVER["HTTP_COOKIE"]:test=T%FCr
$_COOKIE["test"]
在 phpinfo() 中显示:""
在 ISO-8859-1 html 页面中显示:Tür
(在 UTF-8 html 页面中显示:T�r)
字段“test”中的输入字符串(表单中使用 UTF-8):Tür
$_SERVER["HTTP_COOKIE"]:test=T%C3%BCr
$_COOKIE["test"]
在 phpinfo() 中显示:""
在 UTF-8 html 页面中显示:Tür
(在 ISO-8859-1 html 页面中显示:Tür)
PHP 将点 (.) 替换为下划线 (_) 。要查找所有原始 Cookie 名称(和值),可以使用 $_SERVER['HTTP_COOKIE']。
例如,要检索使用 <?php setcookie('testing.dots', 'value'); ?> 设置的 Cookie,可以使用
<?php
$cookies = explode('; ', $_SERVER['HTTP_COOKIE']);
$allCookies = [];
foreach($cookies as $cookie) {
$keyAndValue = explode('=', $cookie);
$allCookies[$keyAndValue[0]] = $keyAndValue[1];
}
var_dump($allCookies);
/*
array(1) {
["testing.dots"]=>
string(5) "value"
}
*/
echo $allCookies['testing.dots'];
?>