PHP小記|中英混合文字列切り取り
1646 ワード
WEBページに記録リストが表示される場合、長すぎる内容を切り取る必要があることが多い.
PHP内蔵のsubstr関数を用いて中英混合文字列、特に文字符号化はUTF-8の場合、サポートが非常に悪く、文字化けしが発生する.
だから自分で関数を書きました
テストに成功した.YEAH!
=======================================================================
2012-06-15更新:
今日再び1つ書きましたが、メリットは2つの英語文字を1つの漢字文字の長さとすることです.
何個の漢字の長さを切り取る必要がありますか?
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) . "...";
}
テストに成功した.YEAH!
=======================================================================
2012-06-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;
}