Jump to content
php.lv forumi

PHP bug's ar encodingu, vai kas?


KillerBean

Recommended Posts

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?

Link to comment
Share on other sites

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];

Link to comment
Share on other sites

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 by briedis
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...