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