使用PHP';s substr()结尾带有特殊字符,结果为问号

使用PHP';s substr()结尾带有特殊字符,结果为问号,php,joomla,substr,Php,Joomla,Substr,当我在PHP中使用substr()函数时,当最后一个字符是特殊字符时,我会在字符串的末尾得到一个问号(带问号的正方形,具体取决于浏览器),如ë或ö等 $introtext = html_entity_decode($item->description, ENT_QUOTES, "UTF-8"); $introtext = substr($introtext, 0, 200); 如何转义?如果字符串采用多字节编码(如UTF-8),则应使用以避免出现以下问题: $introtext=mb_s

当我在PHP中使用substr()函数时,当最后一个字符是特殊字符时,我会在字符串的末尾得到一个问号(带问号的正方形,具体取决于浏览器),如ë或ö等

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

如何转义?

如果字符串采用多字节编码(如UTF-8),则应使用以避免出现以下问题:

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

使用

这是因为substr不能处理多字节字符。substr可能会将多字节字符“一分为二”。你应该改为使用。还要确保您的文件以UTF-8格式保存

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

如果有人尝试了前面的答案,但仍然不起作用:

尝试在
mb_substr
中添加Unicode名称,如:

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

伟大的工作如预期:)这不适用于像åäö这样的斯堪的纳维亚字母,需要添加像Sruit A.Suk建议的utf-8,这救了我一天!啊,这对我帮助很大。特殊字符导致了问题,所以在进行了大量调试后,我发现原因是$myString[$I],这也给substr带来了同样的无效结果。然而,mb_substr现在已经完全解决了这个问题。@SeanMcManus是的,你会发现。接受的答案对我不起作用,我需要用你的方式来处理斯堪的纳维亚角色。谢谢,这不是一个Joomla问题,纯php可以解决这个问题(Sruit a.Suk的答案效果最好),这与之前的所有答案有什么不同?