为了账号安全,请及时绑定邮箱和手机立即绑定

Substr 将最后一个字符显示为?

Substr 将最后一个字符显示为?

PHP
心有法竹 2022-05-27 16:55:53
我的问题有点简单。对于我的网站,我编写了一个函数来获取文本的第一个字符以在预览中显示这些字符。这一直有效,直到最后一个字符是像 ü ä ö 这样的“元音变音”。这是因为它将这些字符计算为双倍(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;}非常感谢!
查看完整描述

2 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

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

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

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


查看完整回答
反对 回复 2022-05-27
?
慕村9548890

TA贡献1884条经验 获得超4个赞

只有启用并使用了扩展程序,您的getFirstChars功能才会起作用。对于多字节安全子字符串,我们可以使用mb_substr函数mbstringmb_substr


function getFirstChars($str, $count){

    if(!function_exists('mb_substr')){

      die('enable mbstring extension'); // you may throw an exception too. 

    }

    $str = trim($str);

    $str = mb_substr($str, 0, $count);


    return $str;

}


查看完整回答
反对 回复 2022-05-27
  • 2 回答
  • 0 关注
  • 196 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号