PHP/Drupal/JavaScript Cookie encoding


PHP/Drupal/JavaScript Cookie encoding

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

这是我在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编写cookie使用全套扩展ASCII字符

为什么这是一个问题?您必须记住,这将出现在Set-Cookie HTTP报头中,并且不编码它,您将始终必须记住特殊字符是什么并避免使用它们。有了编码,你就不用担心这个了。

使用PHP,当您执行$_COOKIE['p']时,它将显示为您最初的意图。如果你想在Javascript中使用document.cookie或其他东西提取它,那么你可以使用decodeURIComponent(cookieValue)