Autor Zpráva
Hanzen
Profil *
Zdravím, mám text který obsahuje zakódované znaky jako třeba \u010d pro písmeno č, je možné to nějak rozkódovat a uložit do proměnné jako normální text? díky
bukaJ
Profil
Kde je třeba to rozkódovat? Javascript by s tím už měl pracovat jako s jedním znakem. Nebo je řeč o PHP?
Hanzen
Profil *
Pomocí xmlhttp si pošlu POST požadavek na jednu stránku, která mi vrátí jako response několik řádků textu a poté tu odpověď pomocí innerHTML zobrazím v divu.. Bohužel místo písmen s háčky a čárkami se mi zobrazují tyhle /u.. unicode entity.
Netuším proč to javascript nerozluští sám od sebe.. možná to bylo nějak zakódované dvakrát po sobě ..?
bukaJ
Profil
Pravděpodobně je to dvojitě escapované.
Hanzen
Profil *
A kterou funkcí to deescapuji? unescape() nemá žádný vliv.
bukaJ
Profil
Takovou funkci jsem nenašel. Escapování znaků probíhá při "čtení" kódu ze zdrojového kódu. Nejedná se tedy o nějakou funkčnost, ale součást syntaxe jazyka.

Pokud Vám proplulo escapování do proměnné, musíte se zaměřit na to, jak se response XHR požadavku generuje a právě tam opravit dvojité escapování.

Opravte skutečnou příčinu problému a nelepte jeho následky na jiných místech.
Hanzen
Profil *
To co mi vyleze z responseTextu bohužel nijak neovlivním, pracovat můžu až s tím dvoj escapovaným textem. Nejde to třeba nějak "přehodit" z proměnné do proměnné aby javascript znova udělal ten překlad \u znaků?
bukaJ
Profil
Pak vůbec nechápu, k čemu je služba, která vrací takovýto bordel. Obrať se na poskytovatele, tohle přece nejde.

Ale jinak by to možná šlo prasárnou ve stylu
document.write('<script>opravena_promenna = \'' + escapovana_promenna + '\'</script>');
ale nemám to vyzkoušené. Kromě toho bych tomu nevěřil na 100% - řekl bych že to hraničí se specifikacemi a prohlížeče na to můžou reagovat různě.
Witiko
Profil
bukaJ:
To už snad spíš:
var výsledek = this.eval("(\"" + escapovanýŘetězec + "\")");
Chamurappi
Profil
Reaguji na Hanzena:
Netuším proč to javascript nerozluští sám od sebe
Protože taháš prostý text. Proč by v něm měl něco nějak luštit? Není to normální řetězec-literál.


Reaguji na bukaJe:
Pravděpodobně je to dvojitě escapované.
Spíš to vypadá na úplně obyčejný json_encode. Pak je správný postup udělat eval na tom celku, co mu přijde…
bukaJ
Profil
No

Witiko:
o už snad spíš:
var výsledek = this.eval("(\"" + escapovanýŘetězec + "\")");

No právě tohle nemusí pomoci. Nejsem si jist, zda bude u evalu probíhat parsování textu. IMHO musí dojít ke znovuzpracování vnějšího vstupu.

Ale nemám to ověřené.
bukaJ
Profil
Chamurappi:
Spíš to vypadá na úplně obyčejný json_encode. Pak je správný postup udělat eval

Aha. Hm. Nojo, vždyť máš pravdu. Já vůl.

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