我怎樣才能得到也包含字符引用的字符串的長度?我只想計算將在瀏覽器中顯示的字符數。像如何獲得包含字符引用的字符串的長度,同時將字符引用計爲一個單個字符?
$raw = "Stack�f9" = Length = 6
$raw = "Stack12345" = Length = 10
$raw = "Stack�f9�f9" = Length = 7
在此先感謝
我怎樣才能得到也包含字符引用的字符串的長度?我只想計算將在瀏覽器中顯示的字符數。像如何獲得包含字符引用的字符串的長度,同時將字符引用計爲一個單個字符?
$raw = "Stack�f9" = Length = 6
$raw = "Stack12345" = Length = 10
$raw = "Stack�f9�f9" = Length = 7
在此先感謝
我會去的:
$len = mb_strlen(html_entities_decode($myString, ENT_QUOTES, 'UTF-8'),'UTF-8');
雖然我爲什麼你有你的字符串中的HTML實體,而不是實際的操作UTF-8編碼字符串的第一個問題。
另外,要小心你的HTML實體沒有被正確寫入(它們需要以分號結尾)。如果您不添加分號,則任何與實體相關的函數都將失敗,並且許多瀏覽器將無法正確呈現您的實體。
看一看mb_strlen
mb_strlen('string' , 'UTF-8');
當你的字符串包含Unicode字符的文本編碼(而不是,比方說,UTF-8編碼),你可以通過簡單地用虛擬字符替換它們來獲得長度,因此:
$length=strlen(preg_replace('/&#[0-9a-f]{4}/', '_', $raw));
如果t嘿分別是編碼與PHP理解的東西,如UTF-8,你可以使用mb_strlen()
intead。
由於Unicode規範化,這可能錯誤地報告'&#101&#769'的長度爲2,當它應該只有1(字母' é')。 – 2010-10-14 12:56:20
他使用的編碼的確切規格沒有被指定,但正則表達式可能被放寬,讀者的練習以及所有這些:)我會猜測OP預期的html樣式實體,在這種情況下,Gumbo的答案是好的一。 – 2010-10-14 13:05:31
strlen
是一個單字節字符串函數,它在多字節字符串上失敗,因爲它只返回字節數而不是字符數(因爲在單字節字符串中每個字節代表一個字符)。
對於多字節字符串,請使用strlen
的多字節對應mb_strlen
,而不要忘記指定正確的字符編碼。
並擁有HTML字符引用被解釋爲單個字符,使用html_entity_decode
由字符替換他們,他們表示:
$str = html_entity_decode('Stackù', ENT_QUOTES, 'UTF-8');
var_dump(mb_strlen($str, 'UTF-8')); // int(6)
注意�f9
不是有效的字符引用,因爲它缺少一個x
或X
之後&#
爲十六進制表示法和;
之後的十六進制值。
他的字符串不是UTF-8,它們實際上包含&#00f9 – 2010-10-14 12:37:06
@Paul Dixon - 問題已被編輯。當最初提出問題時,它不包含實體;這些實體已經被編輯過了,我不相信它們是提問者的意圖。 (我認爲是你downvoted所有的mb_strlen()答案?) – Spudley 2010-10-14 13:23:48