nazolabo

フリーランスのWebエンジニアが近況や思ったことを発信しています。

Smartyでmb_convert_encodingする修正子プラグイン

<?php
/*
* Smarty plugin
* -------------------------------------------------------------
* File:     modifier.encode.php
* Type:     modifier
* Name:     encode
* Purpose:  mb_convert_encoding wrapper
* -------------------------------------------------------------
*/
function smarty_modifier_encode($string, $to, $from = '')
{
    if ( empty($from) ) {
        return mb_convert_encoding($string, $to);
    } else {
        return mb_convert_encoding($string, $to, $from);
    }
}
?>

を、modifier.encode.phpという名前で保存して、Smartyのpluginフォルダに入れる。
使い方は

{$var|encode:"TO":"FROM"}

みたいな感じで(TOとFROMは文字セット名)
使い方の例として、Wikipediaの検索結果画面のURLは

http://ja.wikipedia.org/wiki/%E7%89%B9%E5%88%A5:Search?search={キーワード}&go=%E8%A1%A8%E7%A4%BA

って感じだけど、ここのキーワードはUTF-8にしないといけないので、例えばSJISで書かれたサイトで普通に

http://ja.wikipedia.org/wiki/%E7%89%B9%E5%88%A5:Search?search={$var|escape:"url"}&go=%E8%A1%A8%E7%A4%BA

とやっても文字化けする(はず)なので、このプラグインを使って

http://ja.wikipedia.org/wiki/%E7%89%B9%E5%88%A5:Search?search={$var|encode:"UTF-8":"SJIS"|escape:"url"}&go=%E8%A1%A8%E7%A4%BA

とすると解決する。