| Autor | Zpráva | ||
|---|---|---|---|
| pan.kolouch Profil * |
#1 · Zasláno: 26. 10. 2005, 13:52:03
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 |
#2 · Zasláno: 26. 10. 2005, 14:00:56
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 |
#3 · Zasláno: 26. 10. 2005, 14:03:49
validita zase mate? K čemu vlastně je zapisování & jako & kromě toho, "že to je validní"?
|
||
| pan.kolouch Profil * |
#4 · Zasláno: 26. 10. 2005, 14:08:42
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 * |
#5 · Zasláno: 26. 10. 2005, 14:11:21
Tady je např. funkční příklad z linuxsoftu
<a href=\"51_druha_s.php?id=".$id."&cas=".$cas."&stranek=".$stranek." \">Na nějakou jinou stránku</a> |
||
| Timy Profil |
#6 · Zasláno: 26. 10. 2005, 14:11:22
& 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 * |
#7 · Zasláno: 26. 10. 2005, 14:17:23
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 |
#8 · Zasláno: 26. 10. 2005, 14:24:45
pan.kolouch
V HTML se má používat &. V PHP samozřejmě ne. |
||
| Timy Profil |
#9 · Zasláno: 26. 10. 2005, 14:27:13
Hugo
V HTML se má používat & - proč? |
||
| pan.kolouch Profil * |
#10 · Zasláno: 26. 10. 2005, 14:30:00
Hugo:
Jednoduché. Budu se tím řídit. Prosím ještě o vyjádření k první části dotazu .. |
||
| Hugo Profil |
#11 · Zasláno: 26. 10. 2005, 14:34:32
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 * |
#12 · Zasláno: 26. 10. 2005, 14:35:39
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 |
#13 · Zasláno: 26. 10. 2005, 15:00:28
Timy: V HTML se má používat & - proč?
Jestli jsem to dobře pochopila: http://www.jakpsatweb.cz/faq/parametr-ampersand.html |
||
| Timy Profil |
#14 · Zasláno: 26. 10. 2005, 15:08:55
WeBa
jo, díky za za link, teď už to chápu. Zase Explorer... |
||
| mila Profil |
#15 · Zasláno: 26. 10. 2005, 16:25:40
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áš '&' 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 |
#16 · Zasláno: 26. 10. 2005, 16:35:58
mila
řekl bych, že ten problém je v tom, že explorer tohle & vykreslí jako &, což je chyba, protože na konci chybí středník. FF to vykreslí normálně jako &. No tak změna, teď jsem to zkoušel a i FF & 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 &. 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 |
#17 · Zasláno: 26. 10. 2005, 17:05:21
Prohlížeč se snaží být blbuvzdorný. Když vidí '& ' (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 pondělí" ? |
||
| Timy Profil |
#18 · Zasláno: 26. 10. 2005, 17:22:29
mila
Jak by asi vypadalo "v pondě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 |
#19 · Zasláno: 26. 10. 2005, 17:32:03 · Upravil/a: Chamurappi
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 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 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&reg=ano&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 |
#20 · Zasláno: 26. 10. 2005, 17:45:44
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 &bxcbcv |
||
|
Časová prodleva: 20 let
|
|||
Toto téma je uzamčeno. Odpověď nelze zaslat.
0