2011-06-06 38 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