Smarty"大写"修饰符...总是大写"L"?......和"P"?

Laz*_*zlo 6 smarty modifier capitalize setlocale

很简单:我正在使用Smarty和|capitalize修饰符.它工作正常,但当我传入任何单词时l,它会将其大写,即使它不在单词的开头.

什么为什么?

编辑:同样的事情p.

测试:

{"abcdefghijklmnopqrstuvwxyz"|capitalize}
{"aaal aala alaa laaa"|capitalize}
{"aaap aapa apaa paaa"|capitalize}
Run Code Online (Sandbox Code Playgroud)

输出:

AbcdefghijkLmnoPqrstuvwxyz
AaaL AaLa ALaa Laaa
AaaP AaPa APaa Paaa
Run Code Online (Sandbox Code Playgroud)

Joc*_*ung 5

你也可以使用PHP的ucfirst函数

{"aaal aala alaa laaa"|@ucfirst}
Run Code Online (Sandbox Code Playgroud)

这将导致

Aaal aala alaa laaa


Pau*_*lRe 2

Smarty 主要依赖于ucfirst()PHP 中当前区域设置的影响。我一直无法找到有关这如何影响大写函数(ucfirst、strtolower、strtoupper 等)的确切信息,但您可以尝试将您的区域设置设置为en_US.UTF-8(在我的服务器上有效)并查看它如何影响输出。

查看区域设置:

var_dump(setlocale(LC_CTYPE, null));
Run Code Online (Sandbox Code Playgroud)

更改区域设置:

setlocale(LC_CTYPE, "en_US.UTF-8");
Run Code Online (Sandbox Code Playgroud)

###更新

一些研究导致了一些档案,其中编写了客户修饰符以选择本地修饰符或自定义函数以从模板文件设置区域设置。

来源 1 来源 2

我无法重现这个。可能是您正在使用的字体(有些尾部l)?你有代码示例吗?

与Smarty v2

{assign value="let go" var="go"}
{$go|capitalize}
<br/>
{assign value="allow me" var="me"}
{$me|capitalize}
Run Code Online (Sandbox Code Playgroud)

输出

Let Go
<br/>
Allow me
Run Code Online (Sandbox Code Playgroud)