Autor Zpráva
pan.kolouch
Profil *
Mám zajímavý problém.

Udělal jsem si kontaktní formulář. Po odeslání zkontroluje skript, jestli jsou vyplněna potřebná políčka a jestli je mail
zadán správně. Používám k tomu samostatný skript zpracuj.php. V něm se tedy vše vyhodnotí a podle toho, jak to dopadlo
použiju Header (Location: index.php?stranka=kontakt&odeslano=ano); (v pripade nevyplneneho mailu odeslano=nevyplneno, atd..) Na stránce kontakt převezmu parametr z 'odeslano' a vypíšu pod formulář text, který uživatele informuje, zda-li byl e-mail odeslán, nebo co zadal špatně.

1) Nevím, jestli je to vůbec správný postup zpracovat to v externím skriptu a pak pomocí header se vrátit zpátky.

2) Vše funguje krásně, pokud zadám url jako index.php?stranka=kontakt&odeslano=ano Dočetl jsem se ale, že
správný zápis je pomocí & tedy když to zapíšu index.php?stranka=kontakt&odeslano=ano přestane to fungovat.
Nemůžu přijít na to, co dělám špatně.

jako vždy, předem děkuji za odpovědi.
Petra
Profil
Ale ne, & se používá v odkazech, tj. v HTML kódu má být & jako &. V URL v adresním řádku je to vždy normálně &.
Timy
Profil
validita zase mate? K čemu vlastně je zapisování & jako & kromě toho, "že to je validní"?
pan.kolouch
Profil *
No jasné mi to vůbec není

mám totiž dojem, že jsem někde v nějakém tutoriálu četl, že do adresy patří ne & ale & dokonce jak jsem se díval
na zdrojáky některých stránek, tak bylo napsáno třeba neco.php?id=5&velikost=300; a fungovalo to .. tak kde je tedy pravda ?
pan.kolouch
Profil *
Tady je např. funkční příklad z linuxsoftu

<a href=\"51_druha_s.php?id=".$id."&amp;cas=".$cas."&stranek=".$stranek." \">Na nějakou jinou stránku</a>
Timy
Profil
&amp; se píše pouze v html zdrojáku kvůli validitě, protože tenhle zápis id=5&velikost=300; není validní. Jestli to má ještě nějaký jiný důvod, tak to právě nevím. Prostě tam nechej pouze & a pokud to funguje jak má, tak to dále neřeš.
pan.kolouch
Profil *
No jsem rád, že to funguje, ale stejně mi to vrtá hlavou. Nikde jsem nenašel pořádně vysvětleno jak to má být. A když už to dělám tak to chci mít vše 100%.

Btw. Ještě ohledně prvního dotazu .. je můj postup správný, nebo je to nějaká "prasárna ?"
Hugo
Profil
pan.kolouch

V HTML se má používat &amp;. V PHP samozřejmě ne.
Timy
Profil
Hugo
V HTML se má používat &amp; - proč?
pan.kolouch
Profil *
Hugo:

Jednoduché. Budu se tím řídit.

Prosím ještě o vyjádření k první části dotazu ..
Hugo
Profil
pan.kolouch

Já to tak běžně používám, má to tu výhodu, že nejsou problémy s tlačítkem reload.
pan.kolouch
Profil *
Hugo:

Díky .. procházel jsem totiž různé návody, manuál, atd. a bál jsem se, že jsem to tou svou logikou nějak zprasil. Ale jsem rád, že je to tedy "běžný" postup.
WeBa
Profil
Timy: V HTML se má používat &amp; - proč?
Jestli jsem to dobře pochopila:
http://www.jakpsatweb.cz/faq/parametr-ampersand.html
Timy
Profil
WeBa
jo, díky za za link, teď už to chápu. Zase Explorer...
mila
Profil
Nesváděl bych to na explorer.

Ať píšeš jakýkoliv kód, tak potřebuješ nějaké řídící znaky. A s nimi přichází entity, backslashování a podobné...
Když napíšeš do html znak '<', tak se dost možná zobrazí, a dost možná také udělá neplechu - protože má zvláštní význam. Proto má svou entitu, kterou ho nahradíš.
Znak '&' má také svůj zvláštní význam (začíná se s ním entita), proto by jsi ho měl stejně jako znak '<' patřičně ošetřit.

Když ho tam dáš, jak je, tak to většinou bude fungovat, neboť nebezpečí nepochopení je velmi malé. Ale když se to stane, tak to nesmíš svádět na explorer.

Přirovnal bych to k zapisování prvku pole v php ve tvaru ovoce[hruska]. Dokud nemáš konstantu hruska, tak to funguje. Ale když jijednou někdo nadefinuje, pak ...

Když od html dáš '&amp;' místo '&', tak to prohlížeč nahradí jako každou jinou entitu, a vrátí '&'.
Hlavička, kterou ale posíláš v php skriptu, html parsrem neprochází. Když by si do ní napsal '<b>ahoj</b>', tak stejně nebude adresa v prohlížeči tučná. Stejně jako nebude entita zaměněna....
Timy
Profil
mila
řekl bych, že ten problém je v tom, že explorer tohle &amp vykreslí jako &, což je chyba, protože na konci chybí středník. FF to vykreslí normálně jako &amp.

No tak změna, teď jsem to zkoušel a i FF &amp to vykreslil jako &. Ale pokud si vzpomínám, tak to ještě nedávno FF bez toho středníku na konci nevykreslil jako & ale prostě to vypsal &amp. Nebo že bych se vážně pletl? :-/

Každopádně kdyby prohlížeče entity vykreslovaly pouze pokud by obsahovaly středík, nemusely bychom potom cpát entity do adres.
mila
Profil
Prohlížeč se snaží být blbuvzdorný. Když vidí '&amp ' (což by se asi nemělo vyskytnout), tak hádá. Jedna možnost je, že autor zapomněl na středník, druhá, že chtěl napsat slovo, které začíná tím divným znakem a pokračuje amp.
Co je asi pravděpodobnější?

ok, takhle asi nemyslí, ale když přijde k nevalidnímu zápisu, tak je jen na něm, jak ho interpretuje - lepší než kdyby vyhodil strohé "parse error"
Nemůžu si stěžovat, že mé nevalidní stránky zobrazuje IE špatně. Nikde není totiž řečeno, jak to je správně.

Myslím, že tento přístup má ke všem nedokončeným entitám. Koliktrát se mi stalo, že jsem na středník zapomněl. Nevšiml jsem si toho, dokud jsem nepustil validátor. A byl jsem rád, že do té doby mí návštěvníci vidí stránku, jak jsem chtěl....
Jak by asi vypadalo "v&nbsppondělí" ?
Timy
Profil
mila
Jak by asi vypadalo "v&nbsppondělí" ? -- no tak já si většinou po sobě ty texty na stránce čtu...

Jinak máš asi pravdu, já sice na středníky za entitami nezapomínám (respektive v PSPadu se entita bez středníku neobarví, takže si toho hned všimnu, že něco nesedí), ale věřím, že někdo, kdo s tím nemá takové zkušenosti středníky nemusí používat a pak by to mohlo dělat neplechu, takže je patrně lepší, když to vykreslí i bez středníku.
Chamurappi
Profil
Rozepisování každého ampersandu bez ohledu na to, co za ním následuje, je byrokratická zbytečnost.

Reaguji na Timyho a milu:
řekl bych, že ten problém je v tom, že explorer tohle &amp;amp vykreslí jako &, což je chyba
Tak zrovna v tomto případě to chyba není. Mezera není znak povolený v názvu entity => název entity právě skončil. Tyto jasné implikace se mi na SGML líbí. Jednoznačně definují mnoho stavů tam, kde je jasné, co chtěl autor sdělit a kde XML otravuje s trapným Parse Error.

Mozilla kdysi středníky vyžadovala, Opera tuším také. I dnes existují stavy, v nichž se prohlížeče neshodují. Mezera za &amp;amp takovým stavem není.

Problém, který Yuhů popisuje, se týká jen několika málo výjimek, kvůli nimž nemá cenu zapisovat ampersand vždy jako entitu. Koneckonců i tyto výjimky mají své výjimky:
skript.aspx?parametr=hodnota&amp;reg=ano&amp;copy=ano
- rovnítko není povolený znak v názvu entity => entita skončila a podle SGML je jednoznačné, že jde o entity „reg“ a „copy“. Je to jasné jak prohlížečům, tak validátoru.
Timy
Profil
Chamurappi
Tak zrovna v tomto případě to chyba není. Mezera není znak povolený v názvu entity => název entity právě skončil. -- tak tady je zakopaný pes... takže tohle už FF a MSIE skutečně vykreslí jinak &ampbxcbcv
Toto téma je uzamčeno. Odpověď nelze zaslat.

0