ugrás a tartalomhoz

Input mező > javascript változó > php változó

ASN · 2007. Feb. 28. (Sze), 20.35
A kérdésem a következő lenne: van egy formom, abban mondjuk van egy input mezőm, amibe egy nevet, vagy egy címet írhatok (tartalmazhat szóközöket, speciális jeleket...). Hogy tudom ezt átvinni javascriptbe egy submit alkalmával? És ha ez megvan, még mindig ott a kérdés, hogy innen hogyan tudom felhasználni egy, az XMLHttpRequest által meghívott fájlban, mint PHP változó?

Ha valakinek van valami jó ötlete, az érdekelne. Az nem megoldás itt, hogy egy URL-paraméterben (script.php?input=Szöveg) viszem át, mert a különleges karaktereket nem minden böngésző kezeli jól.
 
1

escape()

vbence · 2007. Feb. 28. (Sze), 21.53
Ha ékezetes karakterekről van szó mindenképpen lesznek különbségek a böngészők között (még egy mezei POSTnál is) amiket neked kell lekezelni.

Azt tudom ajánlani, próbálkozz ezzel:
"script.php?input=" + escape("lőrés");
...és próbáld ki a megcélzott böngészőkben. Az escape használatos speciális karakterek átvitelére URL-ben.

Az escape Latin 1-re van kitalálva, úgyhogy az őűŐŰ problémát fog jelenteni. Az escape("őűŐŰ") eredménye: "%u0151%u0171%u0150%u0170". Ezt a php nem dekódolja alapból. Ha csak magyar karaktereket vársz egy egyszerű str_replace lesz a neked való megoldás. Ha totál nemzetközire szeretnéd, akkor nézd át a php multibyte string funkcióit.
2

nem URL

ASN · 2007. Feb. 28. (Sze), 22.03
És van valami más megoldás, aminél nem URL-ben kell megadni? Mert lehet ez akár több száz szó is, és az kicsit érdekesen nézne ki...
3

iframe

vbence · 2007. Feb. 28. (Sze), 23.00
Tedd a formot iframe-be, és postolhatsz rendesen.
4

encodeURIComponent

Hodicska Gergely · 2007. Feb. 28. (Sze), 23.36
Az escape használatos speciális karakterek átvitelére URL-ben.
Ez nem igazán jó megoldás pont az általad is említett ékezetes karakterek problémája miatt is, ehhez jön még pluszba az is, hogy ha a szövegben egy + jel van, akkor abból szerver oldalon egy szóköz lesz, ami szintén nem túl nyerő.

A következő kis progi érzékelteti a problémát, plusz megmutatja a helyes megoldást is:

<?php
	header('Content-Type: text/html; charset=ISO-8859-2');
	echo '<pre>'.htmlspecialchars(print_r($_GET, true)).'</pre>';
	echo '<pre>'.htmlspecialchars(print_r(iconv('UTF-8', 'ISO-8859-2', $_GET['encodeURIComponent']), true)).'</pre>';
?>
<button onclick="document.location='jsescape.php?escape='+escape('+öüóűőúéáíÖÜÓŰŐÚÉÁÍ')+'&amp;encodeURIComponent='+encodeURIComponent('+öüóűőúéáíÖÜÓŰŐÚÉÁÍ');">
Ha rákattintunk a gombra, akkor ezt kapjuk:
Array
(
    [escape] =>  öüó%u0171%u0151úéáíÖÜÓ%u0170%u0150ÚÉÁÍ
    [encodeURIComponent] => +ÜßóŹĹ�úÊåíĂ�Ă�Ă�Ĺ°Ĺ�Ă�Ă�Ă�Ă�
)

+öüóűőúéáíÖÜÓŰŐÚÉÁÍ


Mint látható az encodeURIComponent függvény azt csinálja, amire szükségünk van. Ha az oldal UTF-8 kódolást használ, akkor az iconv nem is kell. Amire még érdemes lehet figyelni, hogy ez a függvény nem kódolja be a ~'(*)! karaktereket, bár ez többnyire nem gond.


Üdv,
Felhő
5

Nice

vbence · 2007. Már. 1. (Cs), 00.48
Hát mitmondjak, tényleg jobb megoldás, főleg ha UTF8-ban dolgozol. Azért az escape védelmében had jegyezzem meg, hogy egy spártai szituációban (nincs kéznél iconv), egyszerübb egy %uxxxx mintát kicserélni, mint az UTF8-ba kódolt karaktereket dekódolni.

Amúgy érdkes, hogy a böngésző az összes ékezetes karaktert elkódolta.