PHP 字符串索引问题

  • php 通过下标获取的是字节,而不是字符!!!!$str{$i} 获取的是第$i个字节, 而不是第$i 个字符!!!哦 No,准确说是第$i+1个字节,因为下标是从0开始的,并且应该使用 []代替{},这样在以后的PHP版本更安全。
  • PHP可以通过
    $str{0} 或者 $str[0]  的形式获取字符串的第一个字节的内容。

    今天写了一段程序,出现了问题

    $contentLength = mb_strlen($assessment['content']);  //计算字符串的长度,以‘字符’计算
            $content = '';
            for($i = 0; $i <= $contentLength; $i++){
                $content .= $assessment['content']{$i};  //开始我本以为通过字符串下标获取的是指定字符,结果出现了乱码,经查阅发现,字符串下标获取的是指定的字节,而不是字符。所以出现了乱码。
                if($i % 10 == 0) {
                    $content .= "
    
    ";  //每10个字换行
                    $content .= $assessment['content']{$i};  //str_split
                }
            }
            echo 'content:',$content;

    所以以后要特别注意了,之前还真没注意过这个问题,靠 >^_^<

  • 那么如果我想获取第$i个字符怎么实现呢。可以这样
    $contentLength = mb_strlen($assessment['content']);
            $content = '';
            for($i = 0; $i <= $contentLength; $i++){
                //$content .= $assessment['content']{$i};  //这种形式获取的是第$i+1个字节,下标是从0 开始的
                $content .= mb_substr($assessment['content'], $i, 1);  //通过这种方式获取第$i+1个字符
                if($i % 15 == 0) {
                    $content .= "
    
    ";  //每15个字换行
                    $content .= mb_substr($assessment['content'], $i, 1);  //str_split
                }
            }
            echo 'content:',$content;
原文地址:https://www.cnblogs.com/bneglect/p/12085324.html