substr() ne radi ispravno ...

Autor erbi, 07. Kolovoz 2019, 16:30

0 Članovi i 1 Gost pregledava ovu temu.

erbi

Evo, opet mi nešto ne ide...

Imam datoteku datoteka.txt i ovaj kod:

<?php
$file 
file(getcwd() . "/datoteka.txt");
foreach(
$file as $f) {echo substr($f,12,8) . " - " substr($f,21) . "<br />"; }
?>



i echo umjesto:

00:00:27 - Linija 1
00:01:25 - Linija 2
00:04:30 - Linija 2
00:07:32 - Linija 3


Pokazuje ovo:

19 00:00 - 27 Linija 1
00:01:25 - Linija 2
00:04:30 - Linija 2
00:07:32 - Linija 3


Šta je ovo? >:D >:D >:D

Dario

#1
Nije problem u substr, nego datoteka na početku ima "dodatnih znakova"... Nakon kaj ni vrag nije dal mira, ja to sve skinul idem probat napravit iconv text-a iz datoteke...
I evo prve linije :)

01-Aug-2019 00:00:27 Linija 1


Ali ako složiš kod ovak, sve je ok ;)


<?php
$file 
file(getcwd() . "/datoteka.txt");
foreach (
$file as $fKey => $f) {
$text preg_replace('/[^a-zA-Z0-9\s-:]/'''$f);
echo substr($text128) . " - " substr($text21) . "<br />";
}
?>



P.S. pazi samo na regex, ovaj trenutni izbacuje sve znakove koji nisu slova, brojke, razmak, ":" i "-"....
Probaj testirat naša slova (šđčćž) pa ih eventualno dodaš u regex ako ima potrebe....
---
Molim da mi ne šaljete privatne poruke sa zahtjevima za pomoć, takve poruke ignoriram - zato služi forum :)
2b || !2b; this.question();
http://www.dblaze.eu

erbi

Hvala Dario!

Neznam zašto se ovo dogada?? Kod je ovakav:

<?php
$inputString 
file_get_contents('datoteka.txt');
echo 
$inputString;  // Ovdje nema ovih znakova

$test1 iconv('Windows-1250''UTF-8'$inputString);
echo 
$test1;    // Ovdje nema ovih znakova

$pret 'newdat.txt';

$fhh fopen($pret'a') or die("Error");

//$stringUTF8 = "\xEF\xBB\xBF"; // koda za utf-8
//fwrite($fhh, $stringUTF8);
fwrite($fhh$test1);
fclose($fhh);
?>



a kad sad echo newdat.txt su na početku ovi znakovi

Dario

Mislim da se tu na početku radi o nekakvom BOM (Byte Order Mark) zapisu, ali nisam 100% ziher....

Uglavnom ne vidiš znak jer nije namjenjen da ga vidiš, ali kad konvertiraš u drugu kodnu stranicu - ispliva van
---
Molim da mi ne šaljete privatne poruke sa zahtjevima za pomoć, takve poruke ignoriram - zato služi forum :)
2b || !2b; this.question();
http://www.dblaze.eu

erbi

OK, budem sa preg_replace. Nadam se, da ga skužim. Do sada ga nisam.

Hvala još jednom

Dario

Ako trebaš pomoć oko regex-a, javi :)

U privitku imaš cheat sheet (ako pomaže) :)
---
Molim da mi ne šaljete privatne poruke sa zahtjevima za pomoć, takve poruke ignoriram - zato služi forum :)
2b || !2b; this.question();
http://www.dblaze.eu

erbi

U stringu mora da ostane: a-z A-Z 0-9 , - ' : ć-Ć č-Č š-Š ž-Ž  đ-Đ

Dario

Citat: erbi  u 08. Kolovoz 2019, 15:21
U stringu mora da ostane: a-z A-Z 0-9 , - ' : ć-Ć č-Č š-Š ž-Ž  đ-Đ

Onda samo izmjeni regex ovako i trebalo bi biti ok

$text = preg_replace("/[^a-zA-Z0-9\s-:šđč枊ĐČĆŽ,']/", '', $f);
---
Molim da mi ne šaljete privatne poruke sa zahtjevima za pomoć, takve poruke ignoriram - zato služi forum :)
2b || !2b; this.question();
http://www.dblaze.eu

erbi

Hvala Dario!

Ovo je bila moja greška, tako da sad radi i bez regex-a. Datoteka je imala na početku BOM. Negdje na netu sam čitao, da ako želiš utf8, mora da bude ovako:

$stringUTF8 = "\xEF\xBB\xBF"; // koda za utf-8
fwrite($fhh, $stringUTF8);
fwrite($fhh, $podacii);
fclose($fhh)


A sad sam dao ovako i radi:

//$stringUTF8 = "\xEF\xBB\xBF"; // koda za utf-8
//fwrite($fhh, $stringUTF8);
fwrite($fhh, $podaci);
fclose($fhh)

Dario

Citat: Dario  u 08. Kolovoz 2019, 12:36
Mislim da se tu na početku radi o nekakvom BOM (Byte Order Mark) zapisu, ali nisam 100% ziher....

Znači ipak je trebalo samo BOM maknut/parse-at :)
---
Molim da mi ne šaljete privatne poruke sa zahtjevima za pomoć, takve poruke ignoriram - zato služi forum :)
2b || !2b; this.question();
http://www.dblaze.eu