| Autor | Zpráva | ||
|---|---|---|---|
| IdemeNaHavaj Profil |
#1 · Zasláno: 24. 7. 2013, 17:24:20
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 |
#3 · Zasláno: 24. 7. 2013, 18:41:14
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 |
#5 · Zasláno: 24. 7. 2013, 19:06:35
Tá funkcia encodeUriComponent je iba pre script, no ja tam musím načítať slovo cez PHP.
|
||
| Taps Profil |
#6 · Zasláno: 24. 7. 2013, 21:33:34
IdemeNaHavaj:
v php http://www.php.net/manual/en/function.urldecode.php |
||
| Chamurappi Profil |
#7 · Zasláno: 24. 7. 2013, 21:45:37
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 |
#8 · Zasláno: 26. 7. 2013, 16:47:11
<?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> |
||
|
Časová prodleva: 3 dny
|
|||
| _es Profil |
#9 · Zasláno: 29. 7. 2013, 10:00:57
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 |
#10 · Zasláno: 30. 7. 2013, 15:01:18
_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í. |
||
|
Časová prodleva: 13 let
|
|||
0