Forum zajednice Joomla! Hrvatska

Predlošci, web design, web standardi => PHP/JS programiranje => Autor teme: erbi - 07. Kolovoz 2019, 16:30

Naslov: substr() ne radi ispravno ...
Autor: erbi - 07. Kolovoz 2019, 16:30
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
Naslov: Odg: substr() ne radi ispravno ...
Autor: Dario - 08. Kolovoz 2019, 09:59
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....
Naslov: Odg: substr() ne radi ispravno ...
Autor: erbi - 08. Kolovoz 2019, 12:31
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
Naslov: Odg: substr() ne radi ispravno ...
Autor: Dario - 08. Kolovoz 2019, 12:36
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
Naslov: Odg: substr() ne radi ispravno ...
Autor: erbi - 08. Kolovoz 2019, 12:40
OK, budem sa preg_replace. Nadam se, da ga skužim. Do sada ga nisam.

Hvala još jednom
Naslov: Odg: substr() ne radi ispravno ...
Autor: Dario - 08. Kolovoz 2019, 12:55
Ako trebaš pomoć oko regex-a, javi :)

U privitku imaš cheat sheet (ako pomaže) :)
Naslov: Odg: substr() ne radi ispravno ...
Autor: erbi - 08. Kolovoz 2019, 15:21
U stringu mora da ostane: a-z A-Z 0-9 , - ' : ć-Ć č-Č š-Š ž-Ž  đ-Đ
Naslov: Odg: substr() ne radi ispravno ...
Autor: Dario - 13. Kolovoz 2019, 13:07
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);
Naslov: Odg: substr() ne radi ispravno ...
Autor: erbi - 14. Kolovoz 2019, 08:32
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)
Naslov: Odg: substr() ne radi ispravno ...
Autor: Dario - 14. Kolovoz 2019, 10:34
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 :)