Autor Zpráva
IdemeNaHavaj
Profil
Ahoj.
Neviete prečo sa deje toto?
Napíšem do formulára niečo ako "zelená hruška", do URL sa mi to už zformátuje pre vyhladávanie a do URL sa do napíše ako "zelena+hruska"

Toto zelena+hruska javascriptom loadujem a načítavam z neho dáta z DB. Podobne tomuto:
$(".vysledky").load("data.php?vyhladavanie=<?=$vyhladavanie?>");

No vďaka firebugu viem, že sa tam odošle iba slovo "zelena" , teda čokolvek za pluskom sa stratí.
Prečo sa to deje, a ako to napraviť prosím?
Kcko
Profil
použij fci encodeUriComponent ... a až si ji dohledáš tak pochopíš proč se tak děje
IdemeNaHavaj
Profil
To prpíše za zelena%2Bhruska a tam by malo byť to "+" lebo mám fulltextové vyhladávanie.
Kcko
Profil
na straně PHP to od-dekoduješ přes fci urldecode, rawurldecode.... nebo nějaká podobná, podívej se do manuálu.
IdemeNaHavaj
Profil
Tá funkcia encodeUriComponent je iba pre script, no ja tam musím načítať slovo cez PHP.
Taps
Profil
IdemeNaHavaj:
v php http://www.php.net/manual/en/function.urldecode.php
Chamurappi
Profil
Reaguji na IdemeNaHavaje:
Na straně klienta použiješ při sestavení adresy encodeURIComponent, protože nechceš, aby řídicí znaky z řetězce ovlivňovaly strukturu adresy.
Na straně serveru pak při čtení adresy nepoužiješ vůbec nic, protože překlad parametrů z URL se děje automaticky.
Žádná větší věda v tom není.

To prpíše za zelena%2Bhruska
Pokud chceš dostat do adresy plus, tak se z něj stane %2B (a v PHP pak ale opět uvidíš plus). Ale ty tam chceš dostat mezeru, tu encodeURIComponent převede na %20.

že sa tam odošle iba slovo "zelena"
Protože v jQuery je podmínka, která funkci load mění chování podle toho, jestli je v argumentu mezera. Což je sice divné, ale nemění to nic na tom, že by se mezera v adrese neměla ocitnout.
Jan Tvrdík
Profil
<?php $vyhladavanie = 'zelená hruška'; ?>
<script>
    $(".vysledky").load("data.php?vyhladavanie=<?=urlencode($vyhladavanie) ?>");
</script>

Případně podle mě ještě lépe takto:

<?php $vyhladavanie = 'zelená hruška'; ?>
<script>
    $(".vysledky").load("data.php?vyhladavanie=" + <?=json_encode(urlencode($vyhladavanie)) ?>);
</script>

Nebo třeba taky takto:

<?php $vyhladavanie = 'zelená hruška'; ?>
<script>
    $(".vysledky").load("data.php?vyhladavanie=" + encodeURIComponent(<?=json_encode($vyhladavanie) ?>));
</script>
_es
Profil
Jan Tvrdík:
Nevidím zmysel v tom, aby bol na stránke JS, ktorý len bez akejkoľvek akcie návštevníka zobrazuje obsah stránky (ako vo všetkých verziách v [#8]). Ide vlastne len o modifikáciu princípu v Skládání stránek z kousků » Vkládání JavaScriptem.
Jan Tvrdík
Profil
_es:
V prvé řadě se jedná o nepochopení z tvé straně, neboť to se ukázky v [#8] vůbec nesnaží demonstrovat. Celou dobu se to řeší to, že IdemeNaHavaj nemá jasno v escapování, má ukázka ukazuje různé v podstatě ekvivalentní způsoby, jak to správně provést.

Nevidím zmysel v tom, aby bol na stránke JS, ktorý len bez akejkoľvek akcie návštevníka zobrazuje obsah stránky
Tak se pořádně rozhlédni, třeba ten smysl uvidíš =) Např. trvá-li načítání dat dlouho, může být výhodné načíst uživateli během prvních 200ms stránku informující ho o tom, že načtení dat bude chvíli trvat a vlastní načítání dat spustit AJAXem na pozadí.

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: