Autor Zpráva
JardaB
Profil
Zdravím,

mám následující problém.. Javascriptem zapisuji cookies, které poté v případě potřeby čtu v PHP a ukládám do MySQL. Problém nastane, když vezmu data z dtb a v PHP z nich opět vytvořím cookies. V javascriptu pak následně přečíst lze, ale již tam jsou problémy u mezer, které jsou nahrazeny +.


//js
function setCookie(key, value, days) 
{
  var path = "/";
  value = encodeURIComponent(value); 
  value+='; path='+path;
  var date = new Date();
  date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
  value+='; expires=' + date.toGMTString();
  document.cookie = key + '=' + value;
}

function getCookie(name) {
  var cookies = document.cookie.split(/;\s*/);
  for (var i = 0; i < cookies.length; ++i) {
    var cookie = cookies[i].split('=');
    if (cookie[0] === name) return cookie[1]; 
  }
  
var text = decodeURIComponent(getCookie("text"));  

//php
$text = $_COOKIE["text"]; // v php přečtu takto a uložím do mysql, kde se jeví data OK
Kajman
Profil
Nejjednodušší bude nahradit plusko za mezeru nebo za '%20' před dekódováním.
JardaB
Profil
Kajman:
Nejjednodušší bude nahradit plusko za mezeru nebo za '%20' před dekódováním.

Perfektní, funguje.. netuším, kde tam vzniká problém, ale tímto je to vyřešené..

return decodeURIComponent(cookie[1].replace(/\+/g, "%20"));

Díky..
Kajman
Profil
V php to + nechali z historických důvodů
php.net/manual/en/function.urlencode.php#refsect1-function.urlencode-returnvalues

Když by bylo potřeba z php ukládat cookie bez bezer jako +, lze použít k jejich nastavení
setrawcookie('cookie_name', rawurlencode('cookie value'));

Ale v javascriptu bych stejně raději to plusko takto akceptoval.
JardaB
Profil
Kajman:
V php to + nechali z historických důvodů
php.net/manual/en/function.urlencode.php#refsect1-function.urlencode-returnvalues

Děkuji za vysvětlení

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0