Php 在剥离UTF-8文本时,mb#U substr在末尾添加3个点(…),并且不';当课文是拉丁文时,不要加上它们

Php 在剥离UTF-8文本时,mb#U substr在末尾添加3个点(…),并且不';当课文是拉丁文时,不要加上它们,php,Php,我有这样一个代码: if(strlen($text)>=15) $text=mb_substr($text, 0, 15, 'UTF-8'); 它可以正常工作,但问题是,当文本是拉丁语(例如英语)时,当它将其删除时,它不会在最后显示3个点。另一方面,当文本使用其他需要UTF-8编码的语言时,它会在最后添加3个点 例子: 细胞是由什么组成的 被替换为 什么是细胞 另一方面: で作られた細胞は何ですか 被替换为 で作られた細 ... 我遗漏了什么?这是因为返回二进制形式的字符串长度,即八位字

我有这样一个代码:

if(strlen($text)>=15)
$text=mb_substr($text, 0, 15, 'UTF-8');
它可以正常工作,但问题是,当文本是拉丁语(例如英语)时,当它将其删除时,它不会在最后显示3个点。另一方面,当文本使用其他需要UTF-8编码的语言时,它会在最后添加3个点

例子: 细胞是由什么组成的

被替换为

什么是细胞

另一方面:

で作られた細胞は何ですか

被替换为

で作られた細 ...

我遗漏了什么?

这是因为返回二进制形式的字符串长度,即八位字节数

由于utf8以与iso-8859-1相同的方式表示ASCII,因此字符数和八位字节数之间没有差异。但是,对于ASCII以外的字符(如亚洲字符),每个utf8字符最多可占用三个八位字节


因此,要正确确定您需要使用的字符数。

mb_substr
但不是
mb_strlen
?让我试试mb_strlen,它是与substr一起使用的,我只更改了substr,而不是strlen..你救了我一天。非常感谢。