PHP substr返回的收益少于预期

时间:2019-03-13 08:24:11

标签: php

我有以下通过“所见即所得”编辑器提交的文本。我限制为160个字符。第一个输出是完美的,但是一旦我使用substr限制字符,即使原始文本在160个字符以内,它实际上也会剥离20个字符。有人可以帮忙吗?

$stripsms = strip_tags(html_entity_decode($content));

原始输出:

  

远方,在“山”字后面,远离国家   Vokalia和Consonantia,那里住着盲文。分开他们   住在海岸的杜登。

substr($stripsms, 0, 160);

最终输出:

  

远方,在“山”字后面,远离国家   Vokalia和Consonantia,那里住着盲文。分开他们   我住

2 个答案:

答案 0 :(得分:2)

源极有可能用多字节字符集编码。 substr假定单个字节代表一个字符。

有一个 mb_string 扩展名,但是默认情况下未安装。如果可以确保扩展程序可以安装在目标系统上,则可以使用

mb_substr($stripsms, 0, 160, mb_detect_encoding($stripsms))

还有一种替代方法,将preg_matchu标志一起使用以启用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');

看看它是否更好?