- 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 .= "\n\r"; //每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 .= "\n\r"; //每15個字換行 $content .= mb_substr($assessment['content'], $i, 1); //str_split } } echo 'content:',$content;