PHP ノート|中国語と英語の混合文字列インターセプト
WEBページでレコード一覧を表示する場合、長すぎるコンテンツをインターセプトする必要がある場合があります。
PHP の組み込み substr 関数を使用して中国語と英語の混合文字列を処理すると、特に文字エンコーディングが UTF-8 の場合、サポートが非常に不十分で文字化けが発生します。
それで私は関数を書きました:
?
function truncate($string, $len, $wordsafe = FALSE) { $slen = strlen($string); if ($slen <= $len) { return $string; } if ($wordsafe) { while (($string[-- $len] != ' ') && ($len > 0)) { }; } if ((ord($string[$len]) < 0x80) || (ord($string[$len]) >= 0xC0)) { return substr($string, 0, $len) . "..."; } while (ord($string[-- $len]) < 0xC0) { }; return substr($string, 0, $len) . "..."; }
?
テストは成功しました。うん!
?
=========================================== === ========================
2012 年 6 月 15 日更新:
?
今日、もう 1 つ書きました。利点は、2 つの英語文字を 1 つの漢字の長さとして扱うことです。
つまり、何文字の漢字をインターセプトする必要があるかということです
?
?
function truncate($string, $len, $cnCharWidth = 2) { $len = $len * $cnCharWidth; $suffix = "..."; $newStr = ""; for ($i = 0, $j = 0; $i < $len; $i++, $j++) { if (!isset($string[$j])) { $suffix = ""; break; } $start = $j; while ($j < ($start +3) && !(ord($string[$j]) < 0x80)) { $j++; } if ($start == $j) { $charLen = 1; } else { $i = $i + 1; $j--; $charLen = 3; } $newStr .= substr($string, $start, $charLen); } return $newStr . $suffix; }