Autor Zpráva
Kositch
Profil
Ahoj, potřeboval bych poradit, jak se vyhnout použití znaku ampersand - & v url odkaze, kdyz potřebuji pospojovat různé předávané proměnné. Lze tento symbol zapsat nějak jinak bez použití tohoto znaku? Aby význam zůstal stejný a proměnné se předaly. Díky za radu!
Yur4Y
Profil
V URL sa dá zapísať ako %26 - v Javascripte je na ošetrenie takýchto špeciálnych znakov funkcia encodeURIComponent().
Kositch
Profil
Díky za radu, nahradil jsem všechny symboly & v url symbolem %26 ale odkaz nefunguje, přitom se znaky & funguje :/
Kositch
Profil
respektive jsem toto:
http://localhost/photofull.php?folder=zvirata/velke/&picture=zvirata/velke/16.jpg&id=16&max=22


nahradil tímto:
http://localhost/photofull.php?folder=zvirata/velke/%26picture=zvirata/velke/16.jpg%26id=16%26max=22


a odkaz se symboly %26 nefunguje...
Chamurappi
Profil
Reaguji na Kositcha:
Proč ho chceš něčím nahrazovat?
Miloš
Profil
Nejde náhodou o to, že je & nevalidní? Pak použij entitu &
Kositch
Profil
To ne, validitu neřeším, pokud to funguje. Ale jde o to, že používám jeden plugin pro RS Joomla a když použiji do odkazu symbol & tak ten plugin ho předělá na & a odkaz již nefunguje :(
janbarasek
Profil *
tady: http://tvorba-webu.zdarek.com/php/priklady/prevod.php se to dá převéct, můžeš převádět i < > a podobně
Kositch
Profil
Díky, to mi právě převede znaky & na &amp; což mi právě činí ten problém. Můj skript .php dostává přes proměnné hodnoty a ty jsou v url spojeny znakem & a já nevím jak to dělat, aby fungoval i když budou v url znaky &amp; (v tomto případě se proměnná prostě nepřenese)
Chamurappi
Profil
Reaguji na Kositcha:
když použiji do odkazu symbol & tak ten plugin ho předělá na &amp; a odkaz již nefunguje
To znamená, že v atributu href v odkazu je v HTML zapsán ampersand jako &amp;amp;?
Kositch
Profil
Ne, jde o to, že já zapíši odkaz takto:

http://localhost/photofull.php?folder=zvirata/velke/&picture=zvirata/velke/16.jpg&id=16&max=22


Když ho ručně zadám do adresního řádku, tak funguje.

Pokud však spustím stránku, tak jeden plugin, který s ním pracuje ho předělá na toto:

http://localhost/photofull.php?folder=zvirata/velke/&amp;picture=zvirata/velke/16.jpg&amp;id=16&amp;max=22


a to již nefunguje, respektive se nepředají proměnné folder, picture, id a max.
Chamurappi
Profil
Reaguji na Kositcha:
Jak ho předělá? Kde ho předělá? V adresním řádku?

respektive se nepředají proměnné folder, picture, id a max
Tak děláš chybu někde jinde, protože minimálně parametr folder se musí předat vždy.
Kositch
Profil
Já ho takto zapíši v editoru (wysiwig) a poté když se načte stránka s článkem, ve kterém je použit ten odkaz, tak tam se již zobrazí s těmi symboly &amp;

Pro lepší pochopení: ten plugin, konkrétněji plugin na fotogalerii, zpracuje mnou zapsaný odkaz a přiřadí tento odkaz k fotografiím (po kliknutí na ně se otevře ten odkaz) a právě při tom zpracování, kdy ho ten plugin přiřazuje k fotografiím, dojde ke změně symbolu & na &amp;

Ano, parametr folder se předá, moje chyba, ostatní však ne.
Chamurappi
Profil
Reaguji na Kositcha:
když se načte stránka s článkem, ve kterém je použit ten odkaz, tak tam se již zobrazí s těmi symboly &amp;
Kde se tak zobrazí? Ve zdrojovém kódu? V HTML atributu href?
Kositch
Profil
Zobrazí se již ve vygenerovaném html zdrojovém kódu:

<a href='http://localhost.cz/photofull.php?folder=zatisidetaily/velke/&amp;picture=...
Kositch
Profil
Psal jsem již i autorovi pluginu a on říkal, že to takto udělal proto, aby nenastávaly chyby při validaci. Že ten plugin záměrně mění & za &amp; a mě jde jen o to, jestli toto nejde nějak obejít, abych mohl odkazem předávat tyto proměnné.
Chamurappi
Profil
Reaguji na Kositcha:
To ale vůbec ničemu nevadí, v atributech se entity zpracovávají, stejně jako v běžném obsahu elementů. Adresa je s &, přestože je v HTML kódu zapsaná jako &amp;.
Kvůli tomu, že v HTML neexistují entity jménem &picture;, &id; a &max;, bude fungovat i zápis bez nahrazení & za &amp;, nicméně bude fungovat úplně stejně, jako s nahrazením. Chybu máš jinde.

on říkal, že to takto udělal proto, aby nenastávaly chyby při validaci
Geniální odpověď. Místo toho, aby ti řekl, že takhle běžně funguje HTML, se vymlouvá na validaci. Názorná ukázka, jak užitečný rádce je W3C validátor.
Kositch
Profil
Aha díky za vysvětlení. A pokud to tedy chápu správně, tak by odkaz měl fungovat i s &amp; a proměnné by se měly normálně předat mému photofull.php? Jen nevím proč to tedy s & jde (pokud ho zapíši přímo do adresního řádku prohlížeče) a s tím &amp; nejde.
Kajman_
Profil *
Pokud prohlížeč narazí v html na adresu s &amp; požádá o adresu jen s &, tedy znakem, který entita &amp; v html reprezentuje.

Můžete odkázat ukázku, kde je v html zdroji &amp; a na stránce Vám to dělá problémy?
Kositch
Profil
Odkaz poslat nemohu, mám to na localhostu, ale zde je výňatek z vygenerovaného html, kde je odkaz s těmito znaky &amp;

Zmíněný odkaz je na řádku 4.

<a name='g_vsig20_0'></a><div class='vsig vsig20_0' id='portrety'>
<div class='vsig_top vsig_top20_0'>

<a href='http://localhost.cz/photofull.php?folder=portrety/velke/&amp;picture=portrety/velke/33.jpg&amp;id=33&amp;max=33' title='Zobrazit  v celém okně' target='_blank'>

<img id='topimg20_0' src='http://localhost/images/stories/portrety/33s.jpg' title='Zobrazit  v celém okně' alt='Zobrazit  v celém okně'/>
<div class='outside' style='width:640px;'><span>V zimě u rybníka</span><span>Canon 400D + Tamron 17-50mm f/2.8,  B+W 67 mm CPL MRC, clona f/3.2, čas 1/320 s, ISO 100, 36 mm</span>
</div><br class='vsig_clr' />
Kajman_
Profil *
Až na to, že tag a nemá uzavírací značku, to vypadá korektně. Když na obrázek kliknete, tak v url vidíte co?
Kositch
Profil
Vidím toto:

http://localhost/photofull.php?folder=portrety/velke/&amp;picture=portrety/velke/32.jpg&amp;id=32&amp;max=33
Chamurappi
Profil
Reaguji na Kositcha:
Tohle skutečně vidíš v adresním řádku prohlížeče?
Kositch
Profil
ano opravdu vidím, po kliknutí na fotku která odkazuje na tuto url
Chamurappi
Profil
Reaguji na Kositcha:
Klikneš na ten odkaz (s titulkem „Zobrazit v celém okně“) a v novém okně se ti otevře adresa, v níž je &amp;? Vážně? A je to naprosto obyčejný odkaz? Přesně s tím kódem, který uvádíš? Pokud odpovíš na všechno kladně, tak prosím o odkaz na živou ukázku, protože je to hodně moc divné.
Kositch
Profil
Najedu myší na fotku, zobrazí se popisek "Zobrazit v celém okně" a po kliknutí se mi otevře adresa, kterou jsem uvedl výše.
Chamurappi
Profil
(Edit pro pořádek: V předchozím příspěvku byl chvíli odkaz na Kositchův localhost.)

Reaguji na Kositcha:
Proč jsi nenapsal, že tam tu adresu přiřazuješ JavaScriptem? Ve <script>u v HTML se entity neinterpretují (na rozdíl od XHTML), takže když do hrefu přiřadíš adresu s &amp;, bude v něm skutečně &amp;. Celou dobu jsi nám tu ukazoval HTML kód, který je v absolutním pořádku — proto jsem se ptal, jestli je to obyčejný odkaz, proto jsem se ptal, jestli je tvořený přesně tím kódem. Ne, není — je dodatečně změněný JavaScriptem.

Nejrozumnější řešení je dostat do <script>u normální &. Tam totiž &amp; být nemá. Autor pluginu zjevně sežral XHTML i s navijákem, uvěřil W3C Validátoru a vyrobil zmetek. Je mi líto, že je v tom takový těžko rozmotatelný guláš. Asi na Andrease vlítnu.
Kositch
Profil
Tak díky za rozmotání. Jsem začátečník, tak mi to nějak nepřipadalo důležité se o tom zmínit, omlouvám se :-) Jsem nevěděl, že znáš Andrease. Já s tím tedy nic udělat nemohu pokud to chápu dobře. Musel by to ve svém pluginu změnit Andreas? Což mi říkal, že kvůli té validaci dělat nebude...
Chamurappi
Profil
Reaguji na Kositcha:
Jsem nevěděl, že znáš Andrease.
Neznám. On mě také nezná. Zatím.
V odkázaných komentářích se v odpovědi na tvůj dotaz podepsal jako Andreas, tak o něm mluvím jako o Andreasovi, snad se ten patlal neurazí, jestli si to tu někdy přečte :-)

Musel by to ve svém pluginu změnit Andreas?
Bylo by to vhodné. Nejprve prozkoumám, jestli za chybu může opravdu on, abych nevypadal jako hloupý otravný vůl, a pak mu to zkusím rázně a názorně vysvětlit, abych vypadal jako chytrý otravný vůl.

Když jsem si zběžně prohlédl jeho skript /plugins/content/plugin_vsig/vsig.js, všiml jsem si, že si je vědom toho, že se v adresách nastavených skriptem nepřekládají entity — a snaží se to záplatovat primitivním nahrazováním řetězce v JS. Což sice funguje, ale je to poněkud praštěné, protože záplatuje problém, který sám stvořil. Smůla je, že to v jednom místě zazáplatovat zapomněl, konkrétně na tom, kde jsi narazil na problém. Hledáš-li rychlé a účinné řešení, najdi si řádek 26 ve zmíněném skriptu, nyní vypadá takto:
        vsig_dom(topimg).parentNode.href=t_ident[3];
… a uprav jej do takovéhle podoby:
        vsig_dom(topimg).parentNode.href=t_ident[3].replace(/&amp;/g, "&");
Kositch
Profil
Mockrát děkuji!! Funguje naprosto skvěle. Uvidíme jak to dopadne s jeho přístupem něco měnit, ale tohle mi zcela jednoduše vyřešilo daný problém. Ještě jednou mnohokrát děkuji...

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: