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

Sākumlapa Forumi Mājas lapu izstrāde Servera puse (php, java, ruby, perl, python) Kā pareizi skaitīt multibyte simbolus php rindā (string’

Tiek skatīts 5 ierakstu – 1 līdz 5 (no 5 kopumā)
  • Autors
    Ieraksti
  • #151976
    guitarman
    Participant

    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.

    #245511
    Crow
    Participant

    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.

    #245512
    TokRa
    Participant

    Code:

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

    #245513
    daGrevis
    Participant

    Code:

    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… 🙁

    #245514
    guitarman
    Participant

    Paldies Crow! mb_internal_encoding() strādā!

    Paldies arī pārējiem, bet Crow ieteiktais liekas vienkāršāks…

Tiek skatīts 5 ierakstu – 1 līdz 5 (no 5 kopumā)
  • Jums ir jāpieslēdzas sistēmai, lai varētu komentēt šo tēmu.
Jaunākais portālā