Ékezetes Javascript cookie kiíratása PHP input mezőbe.

Ékezetes Javascript cookie kiíratása PHP input mezőbe.
2019-03-30T19:54:46+01:00
2019-03-31T13:11:17+02:00
2022-12-05T21:25:37+01:00
Herfe
Sziasztok!

Javascript által létrehozott ékezetes cookie-t akarok PHP-val input mezőbe kiíratni. Működik is Firefox-al, Chrome-al, de az IE- az ékezetes karaktereket nem jól adja vissza.

Itt a teszt code:

<!doctype html> <html> <head> <meta charset="utf-8"> <script language="javascript"> document.cookie = "cookie_input=Ékezet Ő; expires=Thu, 18 Dec 2020 12:00:00 UTC; path=/"; </script> </head> <body> <?php print("<input type="text" value="".$_COOKIE['cookie_input']."">"); ?> </body> </html>


Próbáltam így is, de semmi hatása:
print("<input type="text" value="".htmlentities($_COOKIE['cookie_input'])."">"); print("<input type="text" value="".htmlspecialchars($_COOKIE['cookie_input'])."">");


Előre is köszi a segítséget.
Mutasd a teljes hozzászólást!
Amennyire én tudom, cookie értékben csak az ASCII karakterek átvitele szabványos. Most gyorsan kipróbáltam Vivaldiban (Chrome motor) és IE11-ben. A Vivaldi simán UTF-8 kódolásban küldi a kliens oldalon beállított ékezetes cookie értékét, míg az IE11 először kicseréli az összes ékezetes betűt a Unicode-os Replacement Character-rel, ezt kódolja UTF-8-ba, és így küldi el.

Attól eltekintve, hogy mit kéne a szabvány szerint csinálni, az IE működését nem tudod megváltoztatni, ezért ha kénytelen vagy támogatni, akkor csak ASCII karakterekre kell korlátoznod magad. A legegyszerűbb megoldás talán egy encodeURIComponent() függvény használata a kliens oldalon (ez elvégzi az UTF-8 kódolást és a percent-encoding-ot), majd a megfelelő dekódoló függvény használata a szerver oldalon (a PHP-hez nem értek, de biztosan van ilyen függvénye beépítve).
Mutasd a teljes hozzászólást!

  • szerintem ugyanaz a hiba, mint a másik témádban volt: rosszul vannak párosítva az idézőjelek, próbáld meg pld. így (Ideone.com):

    print('<input type="text" value="' . $_COOKIE['cookie_input'] . '">');
    Mutasd a teljes hozzászólást!
  • Nem az a gond. Működik a kód csak IE alatt az ékezetet nem kezeli. A cookie-t mindenképp Javascriptel kell létrehoznom és nem PHP-val.

    De most nézem, hogy a visszaperjelek valamiért nem kerültek bele a hozzászólásba.

    Nem is engedi beszúrni se forrásként se sima szövegként, valamiért kiveszi a fórum. A visszaper helyett ezt rakom a példába [].

    Tehát így íratom ki []=\:

    print("<input type=[]"text[]" value=[]"".$_COOKIE['cookie_input']."[]">");
    Mutasd a teljes hozzászólást!
  • Jó lehet a htmlspecialchars, csak ne azt hajtogasd, hogy 'nem megy, nem megy', hanem debuggolj rendesen, pl:

    var_dump ($from); $to = htmlspecialchars ($from, ENT_QUOTES, 'iso-8859-1'); var_dump ($to);
    Szerk: A \backslash jeleket duplázd meg, hogy a fórum egyet megjelenítsen: \\ -> \
    Mutasd a teljes hozzászólást!
  • Amennyire én tudom, cookie értékben csak az ASCII karakterek átvitele szabványos. Most gyorsan kipróbáltam Vivaldiban (Chrome motor) és IE11-ben. A Vivaldi simán UTF-8 kódolásban küldi a kliens oldalon beállított ékezetes cookie értékét, míg az IE11 először kicseréli az összes ékezetes betűt a Unicode-os Replacement Character-rel, ezt kódolja UTF-8-ba, és így küldi el.

    Attól eltekintve, hogy mit kéne a szabvány szerint csinálni, az IE működését nem tudod megváltoztatni, ezért ha kénytelen vagy támogatni, akkor csak ASCII karakterekre kell korlátoznod magad. A legegyszerűbb megoldás talán egy encodeURIComponent() függvény használata a kliens oldalon (ez elvégzi az UTF-8 kódolást és a percent-encoding-ot), majd a megfelelő dekódoló függvény használata a szerver oldalon (a PHP-hez nem értek, de biztosan van ilyen függvénye beépítve).
    Mutasd a teljes hozzászólást!
  • htmlspecialchar nem jó, IE-nél, Safari-nál ezt az értéket adja vissza:
    �kezet �
    Mutasd a teljes hozzászólást!
  • Köszi!
    encodeURIComponent() -el tökéletesen működik minden böngészővel. PHP-nál nem is kellett átírni semmit.

    Bemásolom ide hátha valakinek segítek vele:

    <script language="javascript"> var cookie_value = 'Ékezet Ő'; document.cookie = "cookie_input="+encodeURIComponent(cookie_value)+"; expires=Thu, 18 Dec 2020 12:00:00 UTC; path=/"; </script> <?php print("<input type=\"text\" value=\"".$_COOKIE['cookie_input']."\">"); ?>
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd