7

很简单:我正在使用 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
4

2 回答 2

5

你也可以使用 PHP 的ucfirst函数

{"aaal aala alaa laaa"|@ucfirst}

这将导致

啊啊啊啊啊啊

于 2011-06-27T15:06:55.577 回答
2

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

查看语言环境:

var_dump(setlocale(LC_CTYPE, null));

更改语言环境:

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

更新

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

来源 1 来源 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

于 2011-06-22T20:32:09.193 回答