SYSTEM238 / NOTES1 / Smarty3関連 / Smarty3で全角スペースにも対応したtrim修飾子

NOTES1 PROG1
Smarty3で全角スペースにも対応したtrim修飾子
Smarty3のtrim修飾子は全角スペースには対応していないので全角スペースに対応したtrim修飾子を作った。

このプラグインを作った経緯

全角、半角、全半混在のスペース文字が文字列の前後についている場合に対応できるtrimが欲しかった。

「表示時のみの使用」と割り切って多レコードの一覧表示時にもストレスが無いようにスピードを優先した。

作った修飾子

[modifier.s238_trim.php]
<?php
/**
 * 半角/全角対応trim
 * @access  public
 */
function smarty_modifier_s238_trim($value){
    if ($value == '') return '';
    return trim(mb_convert_kana($value, 's'));
}

実行例

[smartyの定義]
{$str='  ←[全スペース][半スペース]:[全スペース][半スペース]→  '}
{$str} //オリジナル
{$str|s238_trim}

[実行結果]
  ←[全スペース][半スペース]:[全スペース][半スペース]→   //オリジナル
←[全スペース][半スペース]:[全スペース][半スペース]→

注意事項

このページで紹介しているtrim修飾子は、mb_convert_kana()で全角スペース→半角スペースの変換をしているため"文字列途中の全角スペースも半角スペースに変換"されます。

冒頭にも書きましたが、一覧表示で多数のレコードが表示される場合のためにスピードを優先させています。

文字列途中の全角スペースが半角スペースになってしまうけど「表示だけならたいした事じゃないよね。まぁいいか」です。

そういう事なので入力値(formのinputのvalue等)には使わないでください。
 

それから、trim修飾子が呼び出されるたびに文字エンコーディングを指定するのも無駄が多い(かもしれない(実測してません))ので指定してないです。

たいていの場合は気にせずに動くとは思いますが、trim修飾子が呼び出される前にmb_internal_encoding()で内部文字エンコーディングを指定する事をお勧めします。