Smarty 2.6.14和PHP 5.4.9无法识别{literal}标记

时间:2014-05-15 21:22:01

标签: php smarty smarty2

我有一个带有php smarty标签的html页面。 问题是转义javascript和css代码块所需的{literal}标记。 在许多其他PHP版本,如PHP 5.3或5.5工作正常,但在PHP 5.4.9不工作

当我使用{literal}转义javascript时,如下所示:

<script type="text/javascript">
{literal}
    $(function () {

        jQuery.support.placeholder = false;
        test = document.createElement('input');
        if('placeholder' in test) jQuery.support.placeholder = true;

        if (!$.support.placeholder) {
            $('.field').find ('label').show ();
        }

    });
{/literal}
</script>

我得到"Fatal error: Smarty error: [in login.html line 70]: syntax error: unrecognized tag: php' . str_repeat(" ", substr_count('{literal (Smarty_Compiler.class.php, line 446) in /var/www/library/smarty/Smarty.class.php on line 1095",第70行是代码{literal}

但是,如果我删除{literal}代码并使用{ldelim}{rdelim},则可以正常使用,例如:

<script type="text/javascript">
    $(function () {ldelim}

        jQuery.support.placeholder = false;
        test = document.createElement('input');
        if('placeholder' in test) jQuery.support.placeholder = true;

        if (!$.support.placeholder) {ldelim}
            $('.field').find ('label').show ();
        {rdelim}

    {rdelim});
</script>

我不认为解决方案会更改项目{literal}{ldelim}中的所有标记{rdelim},当我在其他php版本中使用相同的项目时工作正常很多网页使用{literal}转义javascript&#39; s和css。

1 个答案:

答案 0 :(得分:1)

在运行此PHP版本时,似乎这个Smarty版本中存在一个错误。我建议你使用最新的3.x Smarty,如果你不能,你应该测试最后一个Smarty 2.6.28来检查这个bug是否被删除然后决定是否转移到这个Smarty vesion。