前回紹介したものはエスケープはしていなかったので、XMLを出力する際には使えなかった。
理由
・エスケープしてからだとエスケープ後のエンティティが壊れてしまう可能性がある。
・丸めた後だと、バイト数がオーバーしてしまう。
以上の理由から、エスケープもしてくれるタイプを作った。
function smarty_modifier_org_escape_truncate_byte ($string, $length='', $end="…", $enc='UTF-8') {
$length = (int)$length;
$end = (string)$end;
$MbLength = @mb_strlen($string, $enc);
$ByteCount = 0;
$ResStrings = $OverStr = '';
for ($i=0; $i<$MbLength; $i++) {
$str = htmlspecialchars(mb_substr($string, $i, 1, $enc));
$len = strlen($str);
if (($ByteCount + $len + strlen($end)) > $length && $OverStr == '')
$OverStr = $ResStrings . $end;
if (($ByteCount + $len) > $length) {
return $OverStr;
} else {
$ResStrings .= $str;
$ByteCount = $ByteCount + $len;
}
}
return $ResStrings;
}
0 件のコメント:
コメントを投稿