PHP / Drupal / JavaScript Cookie编码

时间:2013-01-07 12:37:10

标签: php javascript drupal encoding

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

这是我想要的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。

1 个答案:

答案 0 :(得分:0)

为什么这是一个问题?您必须记住,这将显示在Set-Cookie HTTP标头中,如果不对其进行编码,您将始终必须记住特殊字符的内容并避免使用它们。使用编码,您不必担心。

使用PHP,当您执行$_COOKIE['p']时,它将按您原来的意图显示。如果您想使用document.cookie或其他内容在Javascript中提取它,则可以使用decodeURIComponent(cookieValue)