Re: Re: strlen and multi-byte characters
| From: | Andrey Pashentsev | Date: | Sun, 16 Jun 2013 17:54:58 +0000 |
| Subject: | Re: Re: strlen and multi-byte characters | ||
| References: | 1 2 3 | Groups: | php.doc |
| Request: | Send a blank email to phpdoc+get-969384416@lists.php.net to get a copy of this message | ||
Below is what I got (php5.4):
1)
Script is in utf-8 with BOM encoding. zend.multibyte is enabled
(to use this feature, mbstring extension must be enabled).
<?php
echo strlen('ы'); //russian letter
$str = 'aa';
echo "\n" . strlen($str);
?>
Output:
1
2
2)
Script is in utf-8 encoding. zend.multibyte is disabled.
<?php
echo strlen('ы');
$str = 'aa';
echo "\n" . strlen($str);
?>
Output:
2
4
"Sherif Ramadan" <theanomaly.is@gmail.com> сообщил/сообщила в
новостях следующее: news:CAL+t6cGPn+VNzAk+g5i-C4CJLLSOrweAL7rBHco38-T_7OwxLw@mail.gmail.com....
On Sun, Jun 16, 2013 at 3:51 AM, Andrey Pashentsev <avp200681@mail.ru> wrote:
"Adam Kazimierczak" <kazymjir@gmail.com> сообщил/сообщила в
новостях следующее: news:51BA2CC5.3060508@gmail.com...
Hello Mailing List,
I found that strlen is often considered as a function that counts
characters in strings, rather than bytes. Such mistake is even often
seen on blogs or tutorials, so many PHP beginners may get confused when
they try to strlen a multi-byte characters string.
I am attaching a patch proposition where the description notes that
length is measured in bytes and adds an example showing results of
strlen used on multi-byte character strings.
Please let me know what do you think about this.
Cheers,
Adam
Hi Adam
I found that strlen is often considered as a function that counts
characters in strings, rather than bytes.
Don't forget about zend.multibyte feature...
If it is on and you have a script in 'utf-8 with BOM' encoding
php will detect it and strlen will take this into account.
zend.multibyte enables the PHP engine to parse source files that are in multibyte encodings. It
has nothing to do with the behavior of strlen, nor does it change the behavior of the function.
Cheers,
Andy