php将第二个参数设置为字符串

php将第二个参数设置为字符串,php,localization,Php,Localization,我正在尝试使用php setlocale()表示日期。 将其设置为: setlocale(LC_TIME, 'pl_utf8','Polish','pl.UTF-8','Polish_Poland.1250','WINDOWS-1250'); 工作正常,但如果使用存储第二个参数的变量,如: setlocale(LC_TIME,$locale) 它不起作用 现在var$locale包含确切的字符串'pl\u utf8','Polish','pl.UTF-8','Polish\u Poland.1

我正在尝试使用php setlocale()表示日期。 将其设置为:

setlocale(LC_TIME, 'pl_utf8','Polish','pl.UTF-8','Polish_Poland.1250','WINDOWS-1250');
工作正常,但如果使用存储第二个参数的变量,如:

setlocale(LC_TIME,$locale)

它不起作用

现在var$locale包含确切的字符串
'pl\u utf8','Polish','pl.UTF-8','Polish\u Poland.1250','WINDOWS-1250'
正在从数据库中提取


为什么不工作?

因为
$locale='pl_utf8'、'Polish'、'pl.UTF-8'、'Polish_Poland.1250'、'WINDOWS-1250'
不是有效的PHP代码(由逗号引起)

如官方文档中关于对多个值使用数组的描述:

$locales = array('pl_utf8','Polish','pl.UTF-8','Polish_Poland.1250','WINDOWS-1250');
并使用它调用setlocale()

setlocale(LC_TIME, "'foo','bar','baz'");
setlocale(LC_TIME, 'foo', 'bar', 'baz');
这和

setlocale(LC_TIME, "'foo','bar','baz'");
setlocale(LC_TIME, 'foo', 'bar', 'baz');
后者传递4个独立的参数,前两个版本只传递2个参数,而第二个参数的格式不符合
setlocale
的理解。除了传递多个字符串,还可以传递数组:

setlocale(LC_TIME, array('foo', 'bar', 'baz'));
但要将字符串
“'foo'、'bar'、'baz'
转换为数组
数组的形式('foo'、'bar'、'baz')
,必须执行以下操作:

$locales = array_map(function ($l) { return trim($l, "'"); }, explode(',', $locale));
这是不必要的复杂。您需要在数据库中以不同的方式存储您的区域设置以简化此操作,目前它们的格式根本不适合此操作