PHP substr返回的值低于预期值

PHP substr返回的值低于预期值,php,Php,我有以下通过我的所见即所得编辑器提交的文本。我限制在160个字符以内。第一个输出是完美的,但是一旦我使用substr限制字符,它实际上去掉了20个字符,即使原始文本在160个字符以内。有人能帮忙吗 $stripsms = strip_tags(html_entity_decode($content)); 原始输出: 远远地,在山后,远离国家 伏卡利亚和辅音,那里有盲文。分开他们 住在海边的杜登 最终输出: 远远地,在山后,远离国家 伏卡利亚和辅音,那里有盲文。分开他们 我活着 可能是编码问题

我有以下通过我的所见即所得编辑器提交的文本。我限制在160个字符以内。第一个输出是完美的,但是一旦我使用substr限制字符,它实际上去掉了20个字符,即使原始文本在160个字符以内。有人能帮忙吗

$stripsms = strip_tags(html_entity_decode($content));
原始输出:

远远地,在山后,远离国家 伏卡利亚和辅音,那里有盲文。分开他们 住在海边的杜登

最终输出:

远远地,在山后,远离国家 伏卡利亚和辅音,那里有盲文。分开他们 我活着


可能是编码问题

您是否尝试过更换:

substr($stripsms, 0, 160);


要查看它是否工作得更好?

很可能源代码是用多字节字符集编码的
substr
假定单个字节代表一个字符

有一个mb_字符串扩展,但是,默认情况下未安装它。如果可以确保扩展可以安装在目标系统上,则可以使用

mb_substr($stripsms, 0, 160, mb_detect_encoding($stripsms))
另一种方法是使用
preg\u match
u
标志启用UTF-8编码,该编码与大多数多字节编码兼容。这是所有PHP安装本机提供的

preg_match('~^.{160}~us', $stripsms, $matches);
var_dump($matches[0]);

您是否检查了substr($stripsms,01160)的输出-它似乎给出了我期望的内容。(即与原始字符串相同)这可能是一个多字节字符集问题。你需要提供更多的信息。如果可能的话,您可以使用mb_字符串扩展名。我已经在PHP7和
substr($stripsms,01160)中尝试了相同的代码输出工作正常。也许有一些空白。尝试
substr(trim($stripsms),0,160)
您能否发布
$content
的内容,以便我们重现您的结果?什么是
var_dump(strlen($stripsms))
mb_substr($stripsms, 0, 160, mb_detect_encoding($stripsms))
preg_match('~^.{160}~us', $stripsms, $matches);
var_dump($matches[0]);