我有以下通过“所见即所得”编辑器提交的文本。我限制为160个字符。第一个输出是完美的,但是一旦我使用substr限制字符,即使原始文本在160个字符以内,它实际上也会剥离20个字符。有人可以帮忙吗?
$stripsms = strip_tags(html_entity_decode($content));
原始输出:
远方,在“山”字后面,远离国家 Vokalia和Consonantia,那里住着盲文。分开他们 住在海岸的杜登。
substr($stripsms, 0, 160);
最终输出:
远方,在“山”字后面,远离国家 Vokalia和Consonantia,那里住着盲文。分开他们 我住
答案 0 :(得分:2)
源极有可能用多字节字符集编码。 substr
假定单个字节代表一个字符。
有一个 mb_string 扩展名,但是默认情况下未安装。如果可以确保扩展程序可以安装在目标系统上,则可以使用
mb_substr($stripsms, 0, 160, mb_detect_encoding($stripsms))
还有一种替代方法,将preg_match
与u
标志一起使用以启用UTF-8编码,该编码与大多数多字节编码兼容。这是所有PHP安装程序本身提供的。
preg_match('~^.{160}~us', $stripsms, $matches);
var_dump($matches[0]);
答案 1 :(得分:1)
可能是编码问题。
您是否尝试过更换:
substr($stripsms, 0, 160);
作者
mb_substr($stripsms, 0, 160, 'UTF-8');
看看它是否更好?