Kā pareizi skaitīt multibyte simbolus php rindā (string' | Notepad.lv


Kā pareizi skaitīt multibyte simbolus php rindā (string'



autors: guitarman

Atbildēt | Sūtīt vēstuli | |

Labuvakaru visiem notepada php meistariem

Parasti šajā forumā esmu radis atbildes uz visiem sevi interesējošiem (gīkiskiem) jautājumiem, tādēļ pirms uzdodu šo jautājumu kādā maksas ārvalstu forumā, izmēģināšu veiksmi šeit. (Ja nu kādam letiņam ir bijusi darīšana ar šo problēmu).

Tātad, negribu ļaut lai lietotājs kurš reģistrējas manā ūbermega portālā varētu izmantot lietotāja vārdu vai paroli kura ir īsāka par noteiktu skaitu simbolu (teiksim sešu).

Mēģināju izmantot strlen kā arī mb_strlen iebūvētās php funkcijas, taču saskāros ar problēmu, ka šīs funkcijas visus multibyte simbolus uzskata par diviem simboliem. Piemēram "abc" ir 3 simboli, taču "ābč" ir 5 simboli. Kā pie velna lai lieku php saprast ka arī burts ar garumzīmi ir saprotams kā viens simbols nevis kā divi?

Ņemot vērā to, ka latviešiem ir raksturīgi izmantot garumzīmes un mīkstinājuma zīmes (kas ir multibyte simboli), domāju ka mana lameriskā problēma būs vairāk kā saprotama kādam php guru.

Ā, un lūdzu neiesakiet javascript risinājumus, jo man pret tiem ir alerģija.

Komentāri

  1. Crow : 23 Augusts 2010 0:32:48 AtbildētProfilsSūtīt vēstuli

    Izmanto mb_internal_encoding(), lai norādītu, kādā kodējumā ir teksts (var uzstādīt iekš PHP.INI defautās vērtības arīdzan) un tad vari droši izmantot mb_strlen() un citas mbstring funkcijas.
    Kā arī, iekš PHP.INI var uzstādīt mbstring.func_overload, lai tas aizstātu attiecīgās parastās funkcijas ar mbstring funkcijām automātiski.

  2. TokRa : 23 Augusts 2010 5:50:13 AtbildētProfilsSūtīt vēstuli


    Kods:
    function strlen_utf8 ($str)
    {
        $i = 0;
        $count = 0;
        $len = strlen ($str);
        while ($i <len>= $len)
            break;
        if ($chr & 0x80)
        {
            $chr <<= 1;
            while ($chr & 0x80)
            {
            $i++;
            $chr <<= 1;
            }
        }
        }
        return $count;
    }

    _________________
    Jautājumi? Komentāri? Sazinies: +371 22077022
    Kvalitatīvs hostings par saprātīgu cenu: Valsts.Lv
    Bezmaksas e-pasts visiem: GW.Lv

  3. daGrevis : 23 Augusts 2010 9:32:33 AtbildētProfilsSūtīt vēstuli


    Kods:
    if(!preg_match('/[^a-zA-Z0-9]{5,25}/', $username))
    {

       exit;

    }


    Bet tas gluži nav risinājums. xD
    Bet jocīgi, ka mb_strlen() nestrādā, kā vajag... =(
    _________________
    Think of how stupid the average person is, and realize half of them are stupider than that. /George Carlin/

    http://twitter.com/#!/daGrevis
    http://last.fm/user/daGrevis
    http://ask.fm/daGrevis

    http://dagrevis.lv/

  4. guitarman : 23 Augusts 2010 13:42:30 AtbildētProfilsSūtīt vēstuli

    Paldies Crow! mb_internal_encoding() strādā!
    Paldies arī pārējiem, bet Crow ieteiktais liekas vienkāršāks...
    _________________
    Mana ģitārmūzika: draugiem.lv/rolandsbrazis
    Un iekš yūtūba: http://www.youtube.com/user/rolandsbrazis

Pievienot komentāru




Digitālās foto kamerasDigitālās foto kameras
  • Saistītās tēmas