2013-03-11 105 views
5

我有一個wordpress網站。PHP:strlen返回字符長度而不是字節長度

我創建簡單頁面模板,如:

<?php 
/** 
* Template Name: Test 
*/ 

echo strlen('Привет'); 

?> 

,我已經創建使用該模板的頁面。該頁面顯示俄語字符串「Привет」的長度(表示'你好')。我期望看到12,因爲由6個字符組成的UTF-8編碼的俄文字符串應該有12個字節的大小,但是我得到了6個字符。

我在其他服務器上測試過相同的東西,並有正確的值 - 12.所以我認爲原因是我的服務器配置。我有wp 3.2.1(升級到wp 3.5.1後我有同樣的問題)和PHP 5.3.3。

目前我已花了大約5天試圖找到解決方案,但沒有運氣。有誰知道這種行爲的原因是什麼?

+0

可能重複的[如何獲得PHP中字符串的字節值?](http://stackoverflow.com/questions/591446/how-doi-i-得到這個字節值的字符串在PHP) – Neal 2013-03-11 15:31:42

+0

@Neal - 這個問題與ord() – 2013-03-11 15:43:30

回答

0

您是否需要爲此使用多字節字符串函數?如http://www.php.net/manual/en/function.mb-strlen.php

+1

似乎OP *想*字節數(不是字符數),這就是['strlen'](http://php.net/manual/en/function.strlen.php)的確是假設回來。 – 2013-03-11 15:31:26

+0

問題是我不使用mb_strlen。我知道mb_strlen會在我的情況下顯示6,但爲什麼strlen會這樣做...我不知道... – Vasiliy 2013-03-11 15:32:07

7

檢查設置php.ini。這個選項允許PHP用mb_strlen()重寫strlen()函數(對於其他等價物也是如此)。這可以解釋你的服務器

編輯

從文檔鏈接報​​價之間的差異:以 正值

要使用函數重載,設置中的mbstring.func_overload在php.ini說表示指定 要重載的函數的類別的位掩碼的組合。它應該設置爲1到 重載mail()函數。 2爲字符串函數,4爲常規 表達式函數。例如,如果它設置爲7,郵件,字符串 和正則表達式函數將被重載。

所以與2 bit設定的值意味着基本的字符串功能將與他們的等效MBSTRING被重載,但不能郵寄或正則表達式的功能;如果你想要normal行爲,這應該是0

+0

這是正確的(和[*記錄*](http://php.net/manual/) en/mbstring.overload.php))回答。 – 2013-03-11 15:33:20

+0

謝謝傑里米,只是添加了文檔參考的答案 – 2013-03-11 15:35:34

+0

我有mbstring。func_overload =「2」。對我來說,什麼應該是正確的價值? – Vasiliy 2013-03-11 15:36:04