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,表示成二進位是00000000
雖然chr(0)不會顯示出什麼,但是他是一個字元。
當漢字被截斷時,根據編碼規則他總是要把後邊的其他字符拉過來一起作為漢字解釋,這就是出現亂碼的原因。而值為0x81到0xff與0x00組合始終都顯示為「空」
根據此特點,在substr的結果後面補上一個chr(0),就可以防止出現亂碼了
註:
編碼第一位元組第二位元組
gb2312 0xa1-0xf7 0xa1-0xfe
gbk 0xa1-0xfe
gbk 0x81-0xfe >
big5 0xa1-0xf7 0x81-0xfe 0x40-0x7e 另一種方法: PH🎜>PH適用於gb2312 編碼,如果是UTF-8 的話需要把第4行改為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; }
PHP代碼
$s .= ord($text[$i] )>127 ? $text[$i].$text[++$i].$text[++$i] : $text[$i];
UTF-8 中的漢字是3個位元組。