PHP 코드
<?php $len = 19; $text = "怎么将新闻的很长的标题只显示前面一些字,后面用.....来代替?"; echo strlen($text)<=$len ? $text : (substr($text,0,$len).chr(0)."...."); ?>
chr(0)은 null이 아닙니다
null은 아무것도 아니며 chr(0)의 값은 0입니다. 16진수로 표현하면 0x00, 2진수로 표현하면 00000000
chr(0)은 아무것도 표시하지 않지만 문자입니다.
한자가 잘리면 인코딩 규칙에 따라 항상 뒤에 있는 다른 문자를 한자로 모아서 해석해야 합니다. 이것이 왜곡된 문자가 나타나는 이유입니다. 0x81~0xff 및 0x00 값의 조합은 항상 "비어 있음"으로 표시됩니다
이 기능에 따르면 substr 결과 뒤에 chr(0)을 추가하면 문자 깨짐을 방지할 수 있습니다
참고:
첫 번째 바이트와 두 번째 바이트를 인코딩하세요.
gb2312 0xa1-0xf7 0xa1-0xfe
gbk 0x81-0xfe 0x81-0xfe 0x40-0x7e
big5 0xa1-0xf7 0x81-0xfe 0x40-0x7e
다른 방법:
PHP 코드
function csubstr($text, $limit) { $s = '; for($i=0;$i< $limit-3;$i++) { $s .= ord($text[$i])>127 ? $text[$i].$text[++$i] : $text[$i]; } return $s; }
위 내용은 gb2312에만 적용됩니다. 인코딩, UTF-8인 경우 4행을
PHP 코드
$s .= ord($text[$i] )>로 변경해야 합니다. ;127 ? $text[$i].$text[ $i].$text[ $i] : $text[$i];
UTF-8의 한자는 3바이트입니다.