【问题标题】:Smarty "capitalize" modifier... always capitalizes "L"? ... and "P"?Smarty“大写”修饰符......总是大写“L”? ...和“P”?
【发布时间】:2011-09-20 17:28:01
【问题描述】:

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

【问题讨论】:

    标签: smarty modifier setlocale capitalize


    【解决方案1】:

    Smarty 主要依赖于ucfirst(),它受 PHP 中当前区域设置的影响。我一直无法找到有关这如何影响大写功能(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
    

    【讨论】:

    • 添加了一个例子。我的字体是Arial。 :)... 它也可以与 P 一起使用。
    • 嗯,你的例子给了我不同的结果,其中 'l' 和 'p' 是小写的。我猜这是由于不同的locale。你的设置是什么? setlocale(LC_CTYPE, NULL);
    • 我按照你所说的设置了语言环境(在 PHP 文件中的任何内容之前)。 ucfirst 工作正常,但 |capitalize 仍然表现异常。
    • 如果您不需要 capitalize 修饰符中不将带数字的单词大写的附加功能,您可以使用 ucfirst 作为您的修饰符 {$var|ucfirst}
    • @Paul DelRe:当然,但这并不能解决奇怪的问题。 :)
    【解决方案2】:

    你也可以使用 PHP 的 ucfirst 函数

    {"aaal aala alaa laaa"|@ucfirst}
    

    这将导致

    呜呜呜呜呜呜

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多