2011-06-06 69 views
12

當我在php中使用substr()函數時,當最後一個字符是字符串時,我在字符串的末尾得到一個問號(帶有questionmark的正方形 - 取決於瀏覽器)像ë或ö等特殊的...具有特殊字符的php substr導致questionmarks

$introtext=html_entity_decode($item->description, ENT_QUOTES, "UTF-8"); 
$introtext=substr($introtext,0,200); 

我該如何逃避?提前致謝!

回答

29

如果字符串包含多字節編碼(如UTF-8),則應該使用mb_substr避免這樣的問題:

$introtext=mb_substr($introtext,0,200); 
+0

謝謝!還不知道那個功能。我現在工作正常! – Bert 2011-06-06 20:55:54

+0

太棒了!按預期工作:) – Can 2015-07-21 19:16:38

+0

這不適用於斯堪的納維亞像åäö字母,需要添加utf-8像Sruit A.Suk建議 – EspeH 2015-08-20 18:38:32

4

這是因爲SUBSTR不與多字節工作字符。 substr可能會將一個多字節字符「減半」。你應該改用mb_substr。另外請確保您的文件以UTF-8格式保存。

$introtext = mb_substr($introtext, 0, 200); 
+0

謝謝!現在工作正常。 – Bert 2011-06-06 21:01:17

2

在有人的情況下,上述嘗試,仍然沒有工作,

嘗試在mb_substr添加Unicode的名稱,如

$introtext=mb_substr($introtext, 0, 200, 'utf-8'); 
+1

接受的答案沒有爲我工作,我需要你的方式讓它與斯堪的納維亞人物一起工作。謝謝 – EspeH 2015-08-20 18:37:22