PHP - pretvori prvo črko v veliko črko - UTF8 podpora (ucfirst, ucwords, mb_convert_case)
Kot veste php funkciji ucfirst in ucwords ne delujeta pravilno, če imamo v tekstu posebne znake (kot naprimer šumniki (č,š,ž) v UTF8 formatu). Podobne težave nastopijo tudi pri ostalih funkcijah, na primer substr ter strtolower.
Zadevo lahko rešimo tako, da spišemo svojo funkcijo, kjer najprej uporabimo mb_strtolower, potem pa gremo čez vse znake in prvo črko v stringu ter vsako črko za presledkom pretvorimo v veliko črko (capitalized). Nekaj takega je moč najti med komentarji na php.net strani.
Veliko bolje elegantna rešitev je uporaba mb_convert_case funkcije, ki podpira tri načine in sicer:
- MB_CASE_UPPER - pretvori vse črke v velike črke - upper case - capitalized string
- MB_CASE_LOWER - pretvori vse črke v male črke - lower case
- MB_CASE_TITLE - pretvori vsako prvo črko v veliko črko
Primeri uporabe:
-
$utf8String = 'češnja je zdrava';
Edino kar manjka je funkcionalnost ekvivalentna ucfirst funkciji. To lahko rešimo s uporabo mb_substr funkcije, kot je to storil že eden izmed komentarjev na php.net spletni strani:
-
function mb_ucfirst($str, $encoding = 'UTF-8') {
-
$str = mb_strtoupper($firstChar, $encoding) . mb_substr(mb_strtolower($str, $encoding), 1, mb_strlen($str), $encoding);
-
-
return $str;
-
}
Imate tudi vi kakšne težave / predlog za opis rešitve v povezavi z UTF8 / posebnimi znaki? Sporočite pod komentarje.

junij 3rd, 2008 ob 9:12 dopoldne
hja, ne vela čist točn tko kakor je kle napisan, vsaj pr men u službi ne
in sicer tale vrstica v capitalize funkciji:
tole ne dela na multibyte charachters (Ž Š Č Đ), nevem zakaj ne, samo se mu zalomi pri s{0}...tkole sem pa potem zgruntov, da dela zdej:
junij 3rd, 2008 ob 9:37 dopoldne
Hvala, sem popravil.
Glavni problem tukaj je, da mb_substr ne deluje pravilno, če kot int $length podaš kot null. Pri substr bi to pomenilo celotni string, pri mb_substr pa pomeni to 0.
Zato moraš uporabiti za parameter int $length mb_strlen (zgoraj si uporabil strlen, kar ne bo vrnilo pravilne dolžine, če bo string vseboval posebne znake).
junij 3rd, 2008 ob 9:52 dopoldne
Mogoče bo lažje s CSS ukazom:
p:first-letter { }
junij 3rd, 2008 ob 8:08 popoldne
tele kodni standadi so samo zato da se mi lahko zajebavamo
ti lukas men deluješ kot ena kopija Luka Fanlooka
junij 3rd, 2008 ob 9:25 popoldne
Ta luka je vele znani spamer.
junij 4th, 2008 ob 12:01 dopoldne
[...] komentarji brezimenko - Internet explorer -Roky - Php - pretvori prvo črko Boštjan - Php - pretvori prvo čAntony - Php - pretvori prvo črkRoky - Php - pretvori prvo črko [...]