<?> PHP NOVA invictum.hr
Izdanje 2026.
Poglavlje 14

Stringovi, brojevi i datumi

Pouzdano obrađujemo tekst, iznose i vrijeme — tri područja u kojima naizgled sitne pretpostavke stvaraju velike pogreške.

24 min čitanja Početno razina PHP 8.5 ciljna verzija

Nakon ovog poglavlja

Što ćete znati napraviti

  • Obrađivati UTF-8 tekst multibyte funkcijama.
  • Razlikovati prikaz broja od njegove pohranjene vrijednosti.
  • Koristiti nepromjenjive datume i eksplicitne vremenske zone.

Hrvatska slova su važna

String nije nužno broj znakova

PHP string je niz bajtova. strlen broji bajtove pa „č“ u UTF-8 može zauzeti više od jednoga. Za korisnički tekst koristite mb_strlen, mb_substr i mb_strtolower uz UTF-8. Tekst pri HTML ispisu uvijek escapajte.

UTF-8 obrada
<?php

$title = 'Čitljiv PHP';

echo mb_strlen($title, 'UTF-8');
echo mb_strtoupper($title, 'UTF-8');
echo htmlspecialchars($title, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');

Vrijednost nije prikaz

Računajte stabilno, formatirajte na rubu

Broj 1234.5 u programu nije isto što i lokalizirani prikaz „1.234,50 €“. U unosu ne uklanjajte naslijepo točke i zareze; najprije definirajte očekivani format. Za valute izbjegavajte binarni float kada preciznost mora biti točna.

Prikaz cijene
<?php

$priceInCents = 123450;
$price = $priceInCents / 100;

echo number_format($price, 2, ',', '.') . ' €';

Vrijeme ima kontekst

DateTimeImmutable i vremenska zona

Vrijeme u bazi često spremamo u UTC-u, a korisniku ga prikazujemo u njegovoj zoni. DateTimeImmutable pri promjeni vraća novi objekt pa se izvorna vrijednost slučajno ne mijenja. ISO 8601 dobar je strojni format; lokalni format pripada prezentaciji.

Pretvorba vremenske zone
<?php

$createdAt = new DateTimeImmutable(
    '2026-07-29 12:00:00',
    new DateTimeZone('UTC')
);

$zagreb = $createdAt->setTimezone(new DateTimeZone('Europe/Zagreb'));
echo $zagreb->format('d.m.Y. H:i');

Primijenite naučeno

Vježba: Sažetak događaja

Prikažite naziv, cijenu ulaznice i vrijeme događaja za korisnika u Zagrebu.

  1. Naziv ograničite multibyte funkcijom.
  2. Cijenu čuvajte u centima i formatirajte pri prikazu.
  3. UTC termin pretvorite u Europe/Zagreb.

Za provjeru i nastavak

Službeni izvori