2013-01-02 73 views
4

我用這種編碼在我的網站上縮短我的推薦,完美的作品!但是現在我遇到了一個問題......我給了用戶從他們自己的語言中添加他們的推薦信的機會。我的編碼工作正常與英文字符,但不與其他語言的字符......任何人都可以告訴我爲什麼它是?字符串長度與其他語言不同......不是英語

<?php 
    $echo = $getFig["news_content"]; 
    if(strlen($echo) <= 100){ 
    $bar = $echo; 
    }if(strlen($echo) > 100){ 
    $bar = substr($echo, 0, 101)."<ahref='#'>Read More...</a>"; 
    } 

    echo htmlspecialchars($bar); 
    ?> 

任何意見,不勝感激。

謝謝。

回答

5

使用mb_*功能。在你的例子mb_strlenmb_substr

的原因是strlensubstr將計算是ASCII字符完全正常,但這樣的結果顯示不正確與strlensubstr一些Unicode字符分配多於一個字節字節。 mb_*功能完美地隱藏了這個問題,而它們對字符集進行計數,而不是字節數。

有關更多信息,請閱讀手冊。

編輯:


您可以使用str_word_count來算多少字字符串在那裏,如果你在的話不是字符更感興趣。

樣品:

$str = 'Some long text Some long text Some long text Some long text Some long text Some long text'; 
echo str_word_count($str); 

注:如果您的目標語言有另一個分隔符比字的空間,您可以編寫自定義函數,將計算該分隔符在給定的字符串的出現。

+0

但我的問題仍未解決。實際上,我需要在這裏做一個長段轉換爲一個更多的鏈接到原來的一個。有沒有一種方法來計算單詞而不是字符......? – TNK

+0

@TharangaNuwan見編輯答案。 – Leri

+0

仍然有問題..我嘗試使用僧伽羅語。像這樣... $ sinhala ='තරංගනුවන්'變量只有兩個單詞..但是當我用str_word_count($ sinhala)輸出給出的迴應11.爲什麼? – TNK

4

查看文檔中的注意事項:

注:

的strlen()返回的字節數,而不是 字符串中的字符數。

strlen()返回字節數,不是字符計數;這兩個對於單字節字符集只是相同的。

使用mb_strlen()如果你想有一個多字節字符集字符串的字符長度,如UTF-8

+0

實際上,'strlen'是[binary-safe](http://en.wikipedia.org/wiki/Binary-safe):「二進制安全函數本質上是一種將輸入視爲未經特定格式的原始數據流的功能。「 – Gumbo

1

您的問題正在發生的事實,這對ASCII字符strlen的作品,是英語。另一種方法是mb_strlen。

這裏是一個示例代碼:

<?php 
$str = "Some user input こんにちわ"; 
$len = mb_strlen($str); 

這僅僅是一個示例來說明什麼,我想說,但我希望它可以解決你的問題

相關問題