Smartyのtruncate修飾子が効かない場合の回避法
presented by 役に立つかもしれないBlog
マルチバイトでうまく動かないtruncate修飾子
あちこちで書かれていますが、文字列のカウントにstrlenを使ったりしているので、日本語文字列でうまく動いてくれません。
で、よく書かれている対処法がmb_truncateという修飾子を作っちゃえ!ということですが、「ファイル増やしたくないし、Smartyライブラリをいじるのは禁止されてるし...」という方には!
そのままテンプレート上でmb_substrを使っちゃう
あまりエレガントではないですけど、以下の方法でもできます。
以下の例は、utf-8の文字コードの文字列を80文字で切り捨てて「・・・」を付加する方法です。
{$myStr|mb_substr:0:80:"utf-8"}{if mb_strlen($myStr, "utf-8") > 80}・・・{/if}
このように、修飾子にそのままPHP関数を使うことができます。 パイプライン「|」の左側に、使いたい関数の第一引数を書いて、それ以降の第2引数以降はコロン「:」で区切って指定します。 変数のアサイン(assign)などでも利用できるので、使ってみてくださいね。
{assign var=shortStr value=$myStr|mb_substr:0:80:"utf-8"}
このページに関連のある記事はこちら
- PHPでMovableTypeのエントリーDBをSQL検索する方法
- EC-CUBEで好きな時にログを出力する方法
- PHPでMovableType5のデータベースにアクセスする方法
- さくらのVPSのPHP+MySQLを最新のものにアップデート。
- MySQL(innoDB)でリレーション設定時に「インデックスは設定されていません」エラー
- Webシステムがメール配信する際に陥りやすい3つの罠
- さくらのVPSでPHPにGDモジュールをインストールする
- Office2007ファイル(docx,xlsx,pptx)のMIME-Typeを正しく判定する方法
- PHPFogとは何か?
- PHPで正しく404エラーページにリダイレクトする方法
- phpMyAdminに付けてはいけないフォルダ名一覧


