Smartyの配列のキーに日本語を使うのはありなのか?

November 15, 2010,
tags: php smarty キー テンプレート関数 日本語 配列


このエントリーをはてなブックマークに追加

Smartyのassingで配列を渡すときにやっぱりキーを日本語にしてしまうと、エラー出るみたいです。
というか、「$あ」とか「$けーき」とかそういう感じのものはダメみたいです。
どうやらtplファイルをPHPに変換(コンパイル)する際の解析に問題があるぽいです。

ということで、PHPではありでも、Smartyでは日本語配列はさけるべきということです。

ただ、やはりそこは使いたいといこともあるとは思うので、解決策を考えました。
Smartyクラスを継承したクラスを作って、assignをオーバーライドして配列のキーが日本語だったときはmd5とかbin2hexで変換したキーにして保存しておく。
プリフィルタ自作して拾ってくるみたいな処理にしようかと思ったけど、変数名が日本語だとダメなんで、うまくいかなかった。。。

結局さける方向で行きたかったテンプレート関数をつかって対応するようにしました。

smarty_function_mb_variable

使い方としては、smarty_function_mb_variable.phpをplguinディレクトリに入れて、あとは以下のように記載すれば大丈夫です。

test.php

<?php
$smarty = new Smarty();
$smarty->assign("あ","い");
$smarty->assign("か",array("き" => "く"));
$smarty->display("test");
?>

test.tpl


{mb_variable var="$か.き"}<br />
{mb_variable var="$さ.き.し"}

出力結果

い
く

最後の変数は何も定義されていないので何も表示されません。

あまりよい感じにではないのですが、とりあえずこうするしか方法思いつきませんでした。
他に何かよい方法がある場合は教えてください。

comments powered by Disqus