Autor | Zpráva | ||
---|---|---|---|
user243 Profil |
Ahoj,
mám následující script, který mi má sjednotit formát data u všech souborů; foreach (glob("*.txt") as $soubor) { $obsah = File($soubor); foreach ($obsah as $polozka) { $polozka = explode("<>", $polozka); //echo $polozka[0] . "<br>"; $orig_datum = $polozka[0]; $nove_datum = date("d-m-Y H-i-s", strtotime($orig_datum)); echo $nove_datum . "<br>"; } } když jej převedu samostatně, tak se převede správě; mám někde chybu ve foreach()? díky. edit: hned ten první soubor měl v sobě BOM, i když v editoru nebylo tedy nic vidět, ale znovunastavením utf-8 se to spravilo; nicméně první výpis je pořád špatný... z <pre> jsem zjistil, že je tam také BOM, ale po úpravě hlavičky na utf-8 BOM "zmizel", ale když jsem to prohnal přes var_dump() , tak má o tři znaky víc, než by měl mít (přičemž nejsou vidět); nejpodivnější je, že to datum má rok 2012, i když php čte soubory abecedně/postupně - tedy od 2011 a na místě, kde by se to datum mělo správně objevit, není; v celém výpisu je jen jednou;
|
||
Tori Profil |
Pokud tam není BOM, tak bych si zobrazila soubor v nějakém editoru, který zobrazí i netisknutelné znaky (např. vim pod linuxem, windowsí programy neznám).
|
||
Alphard Profil |
#3 · Zasláno: 4. 2. 2014, 00:23:36
Lze-li čekat chybu v netisknutelných znacích, obalte to trim(). Dobrá prevence bílých znaků při parsování dat.
|
||
user243 Profil |
#4 · Zasláno: 4. 2. 2014, 07:14:10
Nakonec to byla jen moje nepozornost...
Klasický trim() mě napadl první, ale jaksi nefungoval; tak jsem pátral a našel funkci, která jej při výskytu odstraní: // Strips the UTF-8 mark: (hex value: EF BB BF) function trimUTF8BOM($data){ if(substr($data, 0, 3) == pack('CCC', 239, 187, 191)) { return substr($data, 3); } return $data; } jinak používám pspad, ukládání BOMu mám vypnuté i se zobrazením neviditelných znaků jsem nic neuviděl (nejspíš zase moje chyba), ale přepsání formátu pomohlo; promiňte a děkuji za ochotu. |
||
Časová prodleva: 10 let
|
0