Substr显示最后一个字符为? - php

我的问题有点简单。
对于我的网站,我编写了一个函数以获取文本的第一个字符,以在预览中显示这些字符。直到最后一个字符是像üäö一样的“Umlaut”,该命令才起作用。

这是因为它将这些字符计数为两倍(2个字节)吗?

这是一个例子:

function getFirstChars($str, $count){
    $str = trim($str);
    $str = substr($str, 0, $count);
    return $str;
}

$str = 'Nach Schaffenspausen, Wiedervereinigungen und leider auch einem Schicksalsschlag, kam die 1995 gegründete Band';

echo getFirstChars($str, 100);

当我这样做时,我得到一个?在末尾。

所以我试图改变我的功能,现在它可以工作了,但我不知道这是否是一个好的解决方案:

function getFirstChars($str, $count){
    $str = trim($str);
    $lastChar = substr($str, 0, $count);

    if(mb_detect_encoding($lastChar[$count-1]) == 'UTF-8'){
        $str = substr($str, 0, $count+1);
    }else{
        $str = substr($str, 0, $count);
    }

    return $str;
}

非常感谢!

参考方案

对于包含多字节字符的字符串,substr函数不安全。这是因为像substr这样的标准字符串函数不适用于字符,而适用于字节。两字节字符被视为两个单独的字符。

要使用多字节字符,您必须使用mbstring库中的函数。您的情况是mb_substr

您可以在documentation中找到更多信息。

PHP str_replace数组 - php

我有一个关于将数组返回为特殊字符串的问题。因此,这是我尝试过的代码。$setValues = array("test1", "test2", "testurl"); $change = join("','", $setValues); $done = str_…

PHP-将日期插入日期时间字段 - php

我已在数据库中使用datetime字段存储日期,使用PHP将“今天的日期”插入该字段的正确方法是什么?干杯, 参考方案 我认为您可以使用php date()函数

PHP-如何获取类的成员函数列表? - php

如果我知道班级的名字。有没有办法知道类的成员函数列表? 参考方案 get_class_methods()是你的朋友

php ziparchive类源代码 - php

Improve this question 我如何获取ziparchive类本身的源代码。 参考方案 假设您在谈论PHP ZipArchive class:下载PHP source code并查找适当的文件。如果您希望源代码是PHP代码,您可能会感到失望,因为源代码是用C语言编写的。或者,也可以在PHP Github Development Reposito…

PHP Count数组元素 - php

嗨,有人可以解释为什么这会返回“数组由0个元素组成”。 :$arr = array(1,3,5); $count = count($arr); if ($count = 0) { echo "An array is empty."; } else { echo "An array has $count elements.…