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

时间:2011-06-22 20:26:45

标签: smarty modifier setlocale capitalize

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

为什么?

编辑:与p相同。

测试:

{"abcdefghijklmnopqrstuvwxyz"|capitalize}
{"aaal aala alaa laaa"|capitalize}
{"aaap aapa apaa paaa"|capitalize}

输出:

AbcdefghijkLmnoPqrstuvwxyz
AaaL AaLa ALaa Laaa
AaaP AaPa APaa Paaa

2 个答案:

答案 0 :(得分:5)

您也可以使用PHP的ucfirst函数

{"aaal aala alaa laaa"|@ucfirst}

这将导致

  

Aaal aala alaa laaa

答案 1 :(得分:2)

Smarty主要依赖于受{PHP中设置的当前语言环境影响的ucfirst()。我一直无法找到有关它如何影响大小写函数(ucfirst,strtolower,strtoupper等)的信息,但是您可以尝试将您的语言环境设置为en_US.UTF-8(在我的服务器上有效),看看它是如何影响的输出。

查看区域设置:

var_dump(setlocale(LC_CTYPE, null));

更改区域设置:

setlocale(LC_CTYPE, "en_US.UTF-8");

更新

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

Source 1 Source 2

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

使用Smarty v2

{assign value="let go" var="go"}
{$go|capitalize}
<br/>
{assign value="allow me" var="me"}
{$me|capitalize}

输出

Let Go
<br/>
Allow me

<击>