Autor Zpráva
deter
Profil
Zdravím,
využívám AJAX ve svém diskusním fóru k možnosti náhledu napsaného příspěvku. JS fci předávám obsah elementu textarea, který pak posílám jednomu php scriptu ke zpracování. Předání se děje takto:

prispevek="text="+document.prispevek_form.text.value;

kde text je pak v php scriptu bráno jako proměnná s obsahem document.prispevek_form.text.value (což je samozřejmě příspěvek, jehož náhled chci uživateli zobrazit).

Problém je v tom, že pokud text obsahuje znak &, tak ho JS použije jako řídící znak, což v tomto je oddělovač proměnných předávaných PHP skriptu.

Př.: tento text: Ahoj, právě jsem použil znak &, který dělá neplechu
by pak PHP skript přijal asi jako:
$prispevek="Ahoj, právě jsem použil znak"
$,který

jistě, je to nesmysl, ale snad chápete, jak jsem to myslel. V náhledu se tedy objeví pouze text, který byl napsán před ampersandem, zbytek nikoliv.

Dotaz: Jak zbavit ampersand jeho řídící funkce? Můžu ho nějak escapovat?
panther
Profil
deter
& ?
deter
Profil
v &, jak jistě vidíš, se ten znak & vyskytuje taktéž, takže to řešení není
Měsíček
Profil
& => %26

nebo normální escape .. \&
deter
Profil
Měsíček Jsem docela JS začátečník, můžeš poradit, jak mam ten ampersand nahradit escapovanym & ? Zkoušel jsem string.replace(); ale neúspěšně
Měsíček
Profil
Tohle nejspíše není až tak úplně ono, ale mohlo by tě to navést na správné řešení.

http://cicinovo.misto.cz/_MAIL_/javascript/methods/escape.html
deter
Profil
Měsíček
nakopl jsi mě správným směrem a já se konečně naučil používat replace();

prispevek=prispevek.replace(/&/,'%26');

a je vyřešeno, díky :)
los
Profil *
Keďže v POSTe sú hodnoty URL-zakódované, tak replace ampersandu je nedostatočný. Lepšie to bude takto:
prispevek = "text=" + encodeURIComponent(document.prispevek_form.text.value);
peta
Profil
los
Jestli ti ta funkce v prohlizeci funguje. A to nebyva zvykem krom escape :)
http://www.volny.cz/peter.mlich/Pr/URLchars.htm
los
Profil *
> Jestli ti ta funkce v prohlizeci funguje. A to nebyva zvykem krom escape :)
Samozrejme, že funguje. Metódy escape a unescape nepracujú správne so znakmi mimo základnej ASCII sady a ich použitie je zavrhnuté.

Ak chce niekto vyvíjať pre prehistorické prehliadače, tak táto funkcia bude to najmenej, čo mu nebude fungovať. V tom prípade si musí vývojár ošetriť funkčnosť v žiadaných verziách sám (alebo by musel v otázke explicitne uviesť, že chce podporovať staré verzie prehliadačov).

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