| 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: 12 let
|
|||
0