2012-02-26 9 views
2

Gettextの複数の文字列の形式を計算する式です。例:私は何かやっているのevalとPHPでevalなしで変数式を計算することはできますか?

$expr = 'n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2';

$expr = str_replace('n','$n', $expr); 

$n = 5; 
$result = (int)eval("return $expr;"); 

は、これはあまりにもevalをせずに行うことができますか?

+0

あなたによって事前に定義されたように私は聞いてもいいですか?私はそれがかなり難しいと思います。 evalが引き起こすセキュリティ上の理由から、最も簡単な解決策は、入力されたテキストを解析し、それを渡す前に安全であることを確認するスクリプトを作成することです。 – Anton

+2

この複数形がヘッダーに与えられている元の '.po'ファイルのように、Gettextライブラリに残すことはできませんか? (私はPHPの実装について経験がありません。) '.po'の複数の宣言が不足しているのでしょうか? http://www.php.net/manual/en/function.dngettext.php –

+0

ありがとう、私は考えていたPHPはそれがあった:) – Alex

答えて

3

限られた量を解析できるパーサーを構築することは可能です(複数の計算を行うには些細な算術演算子しか必要ありません)が、それを実装するのに費やす時間とパフォーマンス遅くなります)。

私は個人的にはeval()と一緒に行くか、複数化する必要がある言語ごとに機能を実装するだけです。私は「悪」ではないようevalを前提としたときにはevalなしでそれをやりたい理由

それは、例1である限り、その入力が

関連する問題