{strip}
・1行目
・2行目
・3行目
{/strip}
上記の場合表示結果はこのようになる。
・1行目・2行目・3行目
できれば
・1行目
・2行目
・3行目
としたい場合、どうすれば良いんだろうと探したんですが、どうやら{stirp}は変数内に影響しないという事なので、下記のようにして解決できました。
{strip}
・1行目{"\n"}
・2行目{"\n"}
・3行目{"\n"}
{/strip}
2009年10月6日火曜日
2009年9月4日金曜日
Smarty バイトで文字数指定する場合にエスケープもする。UTF8対応
前回紹介したものはエスケープはしていなかったので、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;
}
理由
・エスケープしてからだとエスケープ後のエンティティが壊れてしまう可能性がある。
・丸めた後だと、バイト数がオーバーしてしまう。
以上の理由から、エスケープもしてくれるタイプを作った。
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;
}
Smartyで指定文字数までに丸める(削る)。ただし指定はByteで指定する。UTF-8へも対応
Smarty側で指定バイト数を超えている場合に文字化けしよいように丸める。
UTF8は1バイト~4バイトまで混じっているので、ちょっと工夫が必要となる。
下記関数では文字数を超えている場合まだ続きを表すための文字を追加できる。
もちろん追加した状態で最大文字数を超えないようにしている。
※デフォルトは”…”
※空を渡せば丸めた後に何も付けずにギリギリまで表示できる。
function smarty_modifier_org_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 = 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;
}
▼利用方法
テンプレート内で下記のように書く。
{$hogehoge|org_truncate_byte:100}
UTF8は1バイト~4バイトまで混じっているので、ちょっと工夫が必要となる。
下記関数では文字数を超えている場合まだ続きを表すための文字を追加できる。
もちろん追加した状態で最大文字数を超えないようにしている。
※デフォルトは”…”
※空を渡せば丸めた後に何も付けずにギリギリまで表示できる。
function smarty_modifier_org_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 = 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;
}
▼利用方法
テンプレート内で下記のように書く。
{$hogehoge|org_truncate_byte:100}
2009年8月26日水曜日
Smarty リソースのエラーについて
ちょっとハマってしまったので、メモ。
リソースが空だよ!!的なエラーが出た時はdisplayを疑ってしまうけど、テンプレート内のincludeも確認する事。
displayばっかり見て変に時間かかった。。。
リソースが空だよ!!的なエラーが出た時はdisplayを疑ってしまうけど、テンプレート内のincludeも確認する事。
displayばっかり見て変に時間かかった。。。
登録:
投稿 (Atom)