logo

INTERNETNE STORITVE

- IZDELAVA SPLETNIH STRANI - OBLIKOVANJE - PROGRAMIRANJE DODATKOV

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:

PHP:
  1. $utf8String = 'češnja je zdrava';
  2. echo mb_convert_case($utf8String, MB_CASE_UPPER, "UTF-8"); // ČEŠNJA JE ZDRAVA
  3. echo mb_convert_case($utf8String, MB_CASE_LOWER, "UTF-8"); // češnja je zdrava
  4. echo mb_convert_case($utf8String, MB_CASE_TITLE, "UTF-8"); // Č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:

PHP:
  1. function mb_ucfirst($str, $encoding = 'UTF-8') {
  2.     $firstChar = mb_substr($str, 0, 1, $encoding);
  3.     $str = mb_strtoupper($firstChar, $encoding) . mb_substr(mb_strtolower($str, $encoding), 1, mb_strlen($str), $encoding);
  4.  
  5.     return $str;
  6. }

Imate tudi vi kakšne težave / predlog za opis rešitve v povezavi z UTF8 / posebnimi znaki? Sporočite pod komentarje.

6x komentirano na “PHP - pretvori prvo črko v veliko črko - UTF8 podpora (ucfirst, ucwords, mb_convert_case)”

  1. Domen je napisal:

    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:

    PHP:
    1. $str = mb_strtoupper($str{0}, $encoding) . mb_substr($str, 1, null, $encoding)

    tole ne dela na multibyte charachters (Ž Š Č Đ), nevem zakaj ne, samo se mu zalomi pri s{0}...tkole sem pa potem zgruntov, da dela zdej:

    PHP:
    1. $s = mb_strtoupper(mb_substr($s,0,1,"UTF-8"),"UTF-8") .mb_strtolower(mb_substr($s,1,strlen($s),"UTF-8"),"UTF-8");

  2. Roky je napisal:

    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).

  3. Antony je napisal:

    Mogoče bo lažje s CSS ukazom:

    p:first-letter { }

  4. Boštjan je napisal:

    tele kodni standadi so samo zato da se mi lahko zajebavamo :P

    ti lukas men deluješ kot ena kopija Luka Fanlooka :evil:

  5. Roky je napisal:

    Ta luka je vele znani spamer.

  6. PHP - delo z UTF-8 stringi oz. podatki - težave s šumniki (č,š,ž) | .: TRSplet - internetne storitve .: je napisal:

    [...] komentarji brezimenko - Internet explorer -Roky - Php - pretvori prvo črko Boštjan - Php - pretvori prvo čAntony - Php - pretvori prvo črkRoky - Php - pretvori prvo črko [...]

Dodaj komentar