0

我有一个基于 Drupal 字段中的数据设置的 cookie。当我使用 PHP 编写 cookie 时,扩展的 ASCII 字符显示为十六进制代码(例如 %7E),但如果我使用 JavaScript 编写类似的 cookie,则扩展的 ASCII 字符在 cookie 中显示为单个字符(例如 ~ )。

这是我想要在我的 cookie 中的字符串。

Section1~email,email.calendar,calendar.wordpresssml,wordpress.moodlesml,moodle.maharasml,mahara.gdrive,gdrive.eportfolio,eportfolioblogs.wiki,wiki.youtube,email.feature,feature|Section2~reader,reader|

如果我使用

setcookie("p", "Section1~email,email.calendar,calendar.wordpresssml,wordpress.moodlesml,moodle.maharasml,mahara.gdrive,gdrive.eportfolio,eportfolioblogs.wiki,wiki.youtube,email.feature,feature|Section2~reader,reader|", $expire);

我明白了 Section1%7Eemail%2Cemail.calendar%2Ccalendar.wordpresssml%2Cwordpress.moodlesml%2Cmoodle.maharasml%2Cmahara.gdrive%2Cgdrive.eportfolio%2Ceportfolioblogs.wiki%2Cwiki.youtube%2Cemail.feature%2Cfeature%7CSection2%7Ereader%2Creader%7C

而不是我想要的字符串。如果我使用 JavaScript 编写 cookie,它可以正常工作。我知道这是一个编码问题,但我真的希望 PHP 使用完整的扩展 ASCII 字符集来编写 cookie。

4

1 回答 1

0

为什么这是个问题?您必须记住这将出现在Set-CookieHTTP 标头中,并且通过不对其进行编码,您将始终必须记住特殊字符是什么并避免使用它们。使用编码,您不必担心这一点。

使用 PHP,当您这样做时,$_COOKIE['p']它会按照您最初的预期显示。如果您想使用 Javascriptdocument.cookie或其他方法将其提取出来,那么您可以使用decodeURIComponent(cookieValue).

于 2013-01-07T13:57:08.373 回答