- /****まず第一に、これは CSDN フォーラム PHP xuzuning (しつこい) のボスであり、gb2312、gbk、big の 3 つのエンコーディングをサポートしています。
- コードは次のとおりです: ***/
- $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)を追加することで文字化けを防ぐことができます
- 注:
- 1バイト目2バイト目をエンコード
- gb2312 0xa1-0xf7 0xa1-0xfe
- gbk 0x81-0xfe 0x81-0xfe 0x40-0x7e
- big5 0xa1-0xf7 0x81-0xfe 0x40-0x7e
- 次に、これはオンラインで検索され、元の作成者は不明です:
- * ****/
- function subString_UTF8( $str, $start, $lenth)
- {
- $len = strlen($str);
- $r = array();
- $n = 0;
- $m = 0;
- for($i = 0; $ i < $len; $i++) {
- $x = substr($str, $i, 1);
- $a = Base_convert(ord($x), 10, 2);
- $a = substr ('00000000 '.$a, -8);
- if ($n < $start){
- if (substr($a, 0, 1) == 0) {
- }elseif (substr($a, 0 , 3) == 110) {
- $i += 1;
- }elseif (substr($a, 0, 4) == 1110) {
- $i += 2;
- }
- $n++;
- }else{
- if ( substr($a, 0, 1) == 0) {
- $r[ ] = substr($str, $i, 1);
- }elseif (substr($a, 0, 3) == 110 ) {
- $r[ ] = substr($str, $i, 2);
- $i += 1;
- }elseif (substr($a, 0, 4) == 1110) {
- $r[ ] = substr($ str, $i, 3);
- $i += 2;
- }else{
- $r[ ] = '';
- }
- if (++$m >= $lenth){
- Break; }
- }
- return $r;
- } // End subString_UTF8;
- }// End String
-
- #この関数は配列を返すため、文字列を表示するには join 関数を使用する必要があります:
- #join( '',subString_UTF8 ($str, $start, $lenth));
- #ページが表示されるときにこのステートメントの後に「...」を追加することもできます
-
-
コードをコピー
|