最后的特殊字符的php substr结果是questionmark

Ber*_*ert 18 php joomla substr

当我在PHP中使用的SUBSTR()函数,我得到一个问号(带有问号方 - 视浏览器)在字符串的结尾,当这最后一个字符是一个特殊的一个,像E或O等...

$introtext = html_entity_decode($item->description, ENT_QUOTES, "UTF-8");
$introtext = substr($introtext, 0, 200);
Run Code Online (Sandbox Code Playgroud)

我该怎么逃避这个?提前致谢!

lon*_*day 47

如果您的字符串具有多字节编码(如UTF-8),您应该使用mb_substr以避免这样的问题:

$introtext=mb_substr($introtext,0,200);
Run Code Online (Sandbox Code Playgroud)

  • 这不适用于像åäö这样的斯堪的纳维亚字母,需要添加Sruit A.Suk建议的utf-8 (2认同)
  • 嗯,这对我有很大帮助。特殊字符引起了问题,因此在进行大量调试后,我发现原因是$ myString [$ i],它也给出了与substr相同的无效结果。但是,mb_substr现在已完全解决了该问题。 (2认同)

ssa*_*ota 5

使用mb_substr

  • 这与之前的所有答案有何不同? (2认同)

ale*_*exn 5

这是因为substr不适用于多字节字符.substr可能会将一个多字节字符"减半".你应该使用mb_substr.还要确保您的文件以UTF-8保存.

$introtext = mb_substr($introtext, 0, 200);
Run Code Online (Sandbox Code Playgroud)


Sru*_*Suk 5

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

尝试以mb_substr类似方式添加Unicode名称:

$introtext = mb_substr($introtext, 0, 200, 'utf-8');
Run Code Online (Sandbox Code Playgroud)