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>";
                  }                  
          }
pracuje dobře (myslím), ale u úplně prvního data 31.12.2011 14:06 mi dvakrát po sobě vypíše 01-01-1970 01-00-00;
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
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
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;
}
Když jsem ještě jednou překontrolovával data, tak jsem našel ještě jeden soubor, který byl ve složce někde dole, ale abecedně byl první - právě v něm byl BOM, musel být někdy v minulosti otevřený v poznámkovém bloku;
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0