Adrian Z.

Adrian Z. IT Project Manager &
PHP Programmer

Temat: ctype_alpha i ŻÓŁTA ŁÓDKA

wykonanie poniższych funkcji

setlocale(LC_ALL, array ( 'pl_PL.utf8', 'pl_PL.iso88592', 'polish', 'pl' ) );
echo strtolower('ŻÓŁTĄ ŁÓDKĄ');

setlocale(LC_ALL, array ( 'pl_PL.utf8', 'pl_PL.iso88592', 'polish', 'pl' ) );
echo ctype_alpha('ŻÓŁTĄ ŁÓDKĄ') ? '1' : '0' ;

zwraca wynik

ŻÓŁtĄ ŁÓdkĄ
0

ustawienia serwera są następujące

Array
(
[decimal_point] => ,
[thousands_sep] =>
[int_curr_symbol] => PLN
[currency_symbol] => zł
[mon_decimal_point] => ,
[mon_thousands_sep] => .
[positive_sign] =>
[negative_sign] => -
[int_frac_digits] => 2
[frac_digits] => 2
[p_cs_precedes] => 0
[p_sep_by_space] => 1
[n_cs_precedes] => 0
[n_sep_by_space] => 1
[p_sign_posn] => 1
[n_sign_posn] => 1
[grouping] => Array
(
)

[mon_grouping] => Array
(
[0] => 3
[1] => 3
)

)

u@s:~$ locale -a
C
de_DE.utf8
en_GB.utf8
en_US.utf8
es_ES.utf8
fr_BE.utf8
fr_FR.utf8
pl_PL.iso88592
pl_PL.utf8
polish
POSIX

i pytanie jak to rozwiązać bo na logikę powinno działać
Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: ctype_alpha i ŻÓŁTA ŁÓDKA

nei zadziala z utf8, ctype_* to funkcyjki jakie php odziedziczylo bezposrednio z C, i z zasady dzialaja one tylko z podstawowym zbiorem ASCII i kodowaniem jednobajtowym.

jezeli chcesz sprawdzic czy ciag w utf8 nie zawiera znakow specjalnych to sprawdz czy dany podciag nie zawiera znakow z takiego przedzialu:

(\x00, \x2F) u (\x3A, \x40) u (\x5B, \x60) u (\x7B, \x7F)

nie operuj na pojedynczych bajtach bo znak w utf8 moze miec do 6 bajtow dlugosci.

o ile sie nie myle nie jest to rozwiazanie kompletne gdyz niektore znaki moga byc kodowane na wiecej niz jeden sposob

konto usunięte

Temat: ctype_alpha i ŻÓŁTA ŁÓDKA

jeśli działamy z UTF-8 to Multibyte String.

Podobne tematy


Następna dyskusja:

PHP.net alpha




Wyślij zaproszenie do