I have a wordpress web site.
I’ve created simple page template like:
<?php
/**
* Template Name: Test
*/
echo strlen('ÐÑивеÑ');
?>
Then i’ve created a page using this template. The page shows the length of russian string ‘ÐÑивеђ (means ‘Hello’). I expect to see 12, as UTF-8 encoded russian string consisting of 6 characters should have a size of 12 bytes, but i get 6 instead.
I’ve tested the same thing on other server and had correct value – 12. So i think the reason is my server configuration. I have wp 3.2.1 (i had the same problem after upgrading to wp 3.5.1) and PHP 5.3.3.
Currently i’ve spent about 5 days trying to find a solution, but have no luck. Does anyone know what is the reason of such behavior?
Check the mbstring.func_overload setting in
php.ini
. This option allows PHP to override the strlen() function with mb_strlen() (and similarly for other equivalents). This could explain the discrepancy between your serversEDIT
Quoting from the doc link:
So a value with the
2 bit
set means that basic string functions will be overloaded with their mbstring equivalent, but not mail or regular expression functions; if you wantnormal
behaviour, this should be 0Have you tried: http://lt.php.net/manual/en/function.mb-strlen.php ?
Do you need to use multi-byte string functions for this? Such as http://www.php.net/manual/en/function.mb-strlen.php
See http://php.net/manual/en/function.mb-strlen.php for more info about getting string length in multi-byte characters.
My file was set to “UCS-2 BE BOM” encoding. (can be viewed from notepad++ – Encoding menu option)
I have then used mb_strlen($line,”UCS-2″) function however for some reason, I was getting incorrect string length (e.g. mb_strlen(“somestr”,”UCS-2″) -> 6, where I was expecting 7)
I have changed the encoding to “UTF-8” for the file and was able to get the correct string length.
I am not sure why I was getting incorrect string length with the other encoding type, but wanted to share what worked for me.