多くの研究の後、私は実際にフォーマット番号にユーザーによってsettedロケールに次の関数を使用しています:PHPの整形ロケールに数字とバック
function number_format_i18n($number, $decimals=0) {
$locale = localeconv();
return number_format($number,$decimals, $locale['decimal_point'], $locale['thousands_sep']);
}
私はDBからの形式番号にこれを使用します。
しかし、ユーザーが数字を入力できるフォームがある場合は、DBに保存できるようにフォーマットする機能が必要です。ここで私はこの解決策を見つけました:
function number_format_en($number) {
// $_SESSION['lang']['locale'] has the locale like de_DE, ar_AE, tr_TR, ...
$fmt = numfmt_create($_SESSION['lang']['locale'], NumberFormatter::DECIMAL);
return numfmt_parse($fmt, $number);
}
これは私がテストしたものの、誰もがテストしたロケールでは動作しません!例として:私は(ar_AE)アラビア語を使用する場合:
$randomNumber = 3171003633.95;
$number2locale = number_format_i18n($randomNumber, 2);
// works as expected: 3,171,003,633.95
// now format it back:
$locale2number = number_format_en($number2locale);
// here I get this: 3.171
がどのように私は「戻る」専用形式に安全な方法で番号を入力ロケールをフォーマットすることができますか?または、numberformatの種類を検出し、en-formatにフォーマットしてDBに保存できる方法はありますか?