KillerBean Posted November 14, 2009 Report Share Posted November 14, 2009 Sveiki, sanāca saskarties ar vienu mistisku lietu un vēlējos pajautāt, varbūt kāds var izskaidrot. PHP 5.1.6 <?php $str = "AĀBCČDEĒ"; $x=1; echo $str[$x]; for($i=0;$i<=(strlen($str)-1);$i++) { echo $str[$i]; }; ?> Šāds kods ANSI/WIN-1257 kodējumā izpildās ok, taču līdz ko maina kodējumu uz UTF-8. for cikls burtus attēlo normāli, taču tikai ar echo $str[$x] izņēmuma simboli (ĀČĒ..) netiek normāli attēloti. Tas ir kaut kāds PHP bug's vai tam ir kāds jēdzīgs pamatojums? Quote Link to comment Share on other sites More sharing options...
2easy Posted November 14, 2009 Report Share Posted November 14, 2009 viss ir pareizi. utf8 kodējumā lv burti ar garum/mīkstinājum zīmēm aizņem 2 baitus (daaaaaaaaaa :D), bet ar $str[$x] no stringa var paņemt tikai 1 baitu. tāpēc lai to burtu varētu normāli attēlot, vajag pielikt klāt arī otru baitu... $str = "AĀBCČDEĒ"; $x=1; echo $str[$x] . $str[$x + 1]; Quote Link to comment Share on other sites More sharing options...
rATRIJS Posted November 14, 2009 Report Share Posted November 14, 2009 Vari izmantot tādu lietu kā mb_substr(), kuram var norādīt kodējumu. Quote Link to comment Share on other sites More sharing options...
KillerBean Posted November 14, 2009 Author Report Share Posted November 14, 2009 aa.. ;) tad ir ok, biju domaajis, ka str[] atpaziist tomeer simbolu :) paldies. Quote Link to comment Share on other sites More sharing options...
briedis Posted November 14, 2009 Report Share Posted November 14, 2009 (edited) aa.. ;) tad ir ok, biju domaajis, ka str[] atpaziist tomeer simbolu :) paldies. Vispār, priekš utf-8 ir atsevišķas funkcijas (kas reāli besī ārā:D), tas pats strlen tev uzrādīs nekorektu simbolu skaitu. skaties visas ar mb_ priekšā (tjipa multi-byte), mb_strlen(), mb_substr, utt... (vēl ņem vērā pašu faila kodējumu, kam būtu jābūt UTF-8 bez BOM) Edited November 14, 2009 by briedis Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.