Autor | Zpráva | ||
---|---|---|---|
Enko Profil * |
#1 · Zasláno: 8. 8. 2012, 17:31:52 · Upravil/a: Enko
Ahoj,
můžete mi prosím někdo poradit proč mi nefunguje PHP_EOL na následujícím příkladu? <?php if(!defined('PHP_EOL')){ define('PHP_EOL', strtoupper(substr(PHP_OS,0,3) == 'WIN') ? "\r\n" : "\n"); } //poslat email o chybe neulozeni do MySQL $zprava = "Nepodařilo se uložit data do MySQL" .PHP_EOL; $zprava .= mysql_errno()." - ".mysql_error(). PHP_EOL; $zprava .= "Pod čarou následuje celý SQL dotaz". PHP_EOL; $zprava .= "----------------------------------" .PHP_EOL; $zprava .= $sql; $mail = "nejak@email.cz"; $predmet = "Nepodařilo se uložit data do MySQL"; cs_mail($mail, $predmet, $zprava, "From: neco@odnekud.cz".PHP_EOL); ?> Aha, tak vše funguje jak má. Můj emailový klient odstraňuje "nadbytečné" konce řádků. :) |
||
Časová prodleva: 4 roky
|
|||
jirka0376 Profil |
#2 · Zasláno: 16. 1. 2017, 16:47:21
Ahojky,
potřeboval bych poradit? Používám Microsoft Expression Web 4 a: - když napíši do kódu PHP_EOL, tak se neodřádkuje a proměnná 2 pokračuje hned za první echo $promenna1 . PHP_EOL . $promenna2; - oproti tomu <br/> mi vždy odřádkuje a obě proměnné jsou na samostatných řádcích echo $promenna1 . '<br/>' . $promenna2; Nevěděl by někdo, čím by to mohlo být? Chtěl by používat PHP_EOL, abych se vyhnul nefunčnosti na některých platformách. |
||
Tomášeek Profil |
#3 · Zasláno: 16. 1. 2017, 16:49:48
jirka0376:
Ano, to je v pořádku. V HTML se jeden či více bílých interpretuje jako jedna mezera. Doporučuji zkusit nastudovat, jakýže rozdíl mezi PHP_EOL a BR je. Velký. |
||
midlan Profil |
jirka0376:
Emailoví klienti zřejmě interpretují obsah zprávy jako HTML (text/html), ty je musíš přinutít aby na něj pohlíželi jako na prostý text (text/plain). Přidej tedy hlavičku Content-Type: text/plain a příslušné kódování.
Mimo to bych doporučil používat odřádkování stylem DOS (který funguje i pro unix a mac systémy), tedy netisknutelnými znaky CR LF. PHP_EOL , pokud vím, vrací odřádkování podle toho, na jakém systému PHP zrovna běží ikdyž klienti používají různé systémy.
|
||
Časová prodleva: 20 dní
|
|||
jirka0376 Profil |
midlan [#4]:
Nejedná se mi o odřádkování v emailu, ale v rámci webové stránky. Asi jsem to měl napsat. :-) Když jsem si otestoval PHP_EOL na stránce sandbox.onlinephpfunctions.com/code/615a29d3bef2c85d9f9e16f514806efdd34424b2, tak tam funguje, jak má - tedy odřádkuje. Tomášeek: Jaký je rozdíl mezi PHP_EOL a BR je mi jasný podle definice: Účelem PHP_EOL je automaticky zvolit správný znak pro platformu, takže odřádkování je nezávislé na platformě. |
||
Lonanek Profil |
#6 · Zasláno: 7. 2. 2017, 19:32:56
Jaký je formát souboru (použité pro odřádkování - Windows, Unix, MAC) a na jakém systému to běží, jaká je verze PHP?
|
||
Davex Profil |
jirka0376:
„Účelem PHP_EOL je automaticky zvolit správný znak pro platformu, takže odřádkování je nezávislé na platformě.“ PHP_EOL obsahuje odřádkování podle toho, na jaké platformě běží PHP, takže toto nemá smysl používat pro webové stránky, jelikož
1) webový prohlížeč může běžet na zcela odlišné platformě než server s PHP 2) webové prohlížeče na různých platformách běžně zvládají více typů standardizovaných odřádkování |
||
jirka0376 Profil |
Lonanek [#6]:
Pracuji zatím v programu Microsoft Expression Web 4 pod Windows 7 64bit / na serveru mi to běží pod Linuxem. Verze PHP je 5.6.30. |
||
mckay Profil |
jirka0376:
„Účelem PHP_EOL je automaticky zvolit správný znak pro platformu, takže odřádkování je nezávislé na platformě.“ PHP_EOL dle mého porozumění vkládá konec řádku odpovídající používanému znaku konce řádku na platformě (systému), na kterém běží PHP které skript interpretuje. Adresa na které si to zkoušíte vypisuje výstup do <textarea> HTML elementu a proto se Vám text viditelně odřádkuje.
Problém je zřejmě v tom, že všude jinde se znak zalomení řádku zobrazuje - stejně jako jakýkoliv jiný bílý znak v prohlížeči - jako mezera. Jedna mezera. Chcete-li v prohlížeči zobrazovat text na nový řádek, budete místo PHP_EOL muset použít tag <br> .
Nabízí se otázka: K čemu tedy ty konce řádku přes PHP_EOL jsou? No, využití je více, pěkná demonstrace by pro Vás mohlo být vytvoření dvou skriptů s následujícími zdrojovými kódy a zobrazení jejich zdrojového kódu po vykonání na serveru:
Skript 1: <?php echo "Můj dlouhý text <br> pojďme tohle dát na nový řádek <br> a ještě jednou toto také na nový řádek"; ?> Vygenerovaný zdrojový kód: Můj dlouhý text <br> pojďme tohle dát na nový řádek <br> a ještě jednou toto také na nový řádek Skript 2: <?php echo "Můj dlouhý text <br>" . PHP_EOL . " pojďme tohle dát na nový řádek <br> " . PHP_EOL . " a ještě jednou toto také na nový řádek"; ?> Vygenerovaný zdrojový kód: Můj dlouhý text <br> pojďme tohle dát na nový řádek <br> a ještě jednou toto také na nový řádek Porovnáte-li zdrojové kódy výstupů těchto dvou skriptů, uvidíte, že druhý zdrojový kód používající PHP_EOL vkládá do zdrojového kódu znak zalomení řádku. A právě tento znak zalomení řádku je zvolen pro platformu, na které běží PHP - samotnou finální podobu zobrazované stránky v prohlížeči to však vůbec neovlivní.
„Nevěděl by někdo, čím by to mohlo být? Chtěl by používat PHP_EOL, abych se vyhnul nefunčnosti na některých platformách.“ Řešení zkráceně: Chcete-li se vyhnout nefunkčnosti na některých platformách, používejte všude <br> popřípadě <br /> , používate-li XHTML.
|
||
Keeehi Profil |
#10 · Zasláno: 8. 2. 2017, 02:15:38
PHP_EOL je konstanta. A na každém serveru může mít jinou hodnotu. Pokud půjde o windows server, pak PHP_EOL == "\r\n" a pokud půjde o linuxový stroj, pak PHP_EOL == "\n" . K čemu to je dobré? Asi by se to hodilo při tvorbě souborů na serveru, ale to je tak asi vše.
Pro výpis HTML je to úplně k ničemu. Na zobrazení stránky to absolutně nemá vliv (obojí bude vypadat jako mezera). Znak(y) nového řádku budou vidět jen ve zdrojovém kódu a tam všude stačí \n .
|
||
Časová prodleva: 8 let
|
0