找不到语法中的错误

时间:2010-09-14 15:35:35

标签: php javascript json

我有以下代码:

onclick=" <?php echo 'postwith(\''.$_SERVER['PHP_SELF'].'\',{export:\'export\',date:\''.$_POST['date'].'\'})'; ?>"

而postwith是一个功能。

in ie我有一个错误: Expected identifier, string or number

在Firefox中没关系,链接是:

postwith('/page/page.php',{export:'export',date:'Yesterday'})

那我的错误在哪里?

谢谢你!

5 个答案:

答案 0 :(得分:4)

export是一个关键字,因此IE Javascript引擎似乎与您在该上下文中使用它混淆。你可以把它放在引号中,以表明它是一把钥匙。

答案 1 :(得分:2)

+1 warrenm,需要引用export

但是这种事情并不好。所有嵌套引用都几乎无法读取,并且因为您没有JavaScript-string-literal-escaped或HTML转义datePHP_SELF,您可能会遇到HTML注入错误跨站点脚本安全漏洞。

永远不要在没有htmlspecialchars()的情况下将文本字符串输出到HTML文本内容或属性值,并且在构建JS对象时使用json_encode()创建输出,因为它将处理字符串转义问题和引用对象文字名称。

从PHP 5.3开始,JSON_HEX选项允许您确保所有HTML特殊字符都被编码为JavaScript字符串文字转义符,因此您不必在JSON编码之上进行HTML编码,这意味着你可以在事件处理程序属性和<script>块中使用相同的输出函数(它们是CDATA,没有HTML转义)。

<?php
    function j($o) {
        echo json_encode($o, JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_QUOT);
    };
    $pars= array("export"=>"export", "date"=>$_POST['date']);
?>

onclick="postwith(<?php j($_SERVER['PHP_SELF']); ?>, <?php j($pars); ?>);"

还要考虑分解onclick处理程序并从<script>分配它而不是使用内联事件处理程序属性。这往往更具可读性。

答案 2 :(得分:1)

正如warrenm所指出的,export是一个关键字,需要引用。

即改变PHP,结果输出为:

postwith('/page/page.php',{'export':'export','date':'Yesterday'});

你的PHP看起来像这样:

onclick="<?php echo "postwith('{$_SERVER['PHP_SELF']}',
     {'export':'export','date':'{$_POST['date']}'})"; ?>"

(谢谢,Peter改进了语法)。

此外,您可能希望在onclick后删除空格:

onclick=" <?php 

将成为:

onclick="<?php 

答案 3 :(得分:1)

为了将来参考,如果对PHP字符串使用双引号并在字符串中使用数组元素的大括号表示法,您可能会发现更容易证明读取:

onclick="<?php echo "postwith('{$_SERVER['PHP_SELF']}',
         {'export':'export','date':'{$_POST['date']}'})"; ?>"

<强> simplified example of using curly bracket notation inside double quotes
(请注意,您不需要以字面方式呈现大括号)

此外,您应该使用 json_encode() 来确保您的JSON格式正确:
(注意onclick后的单引号以容纳双引号JSON)

onclick='<?php
    echo "postwith(\"{$_SERVER['PHP_SELF']}\"," .
    json_encode(array("export" => "export", "date" => $_POST['date']),
                JSON_FORCE_OBJECT|JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_QUOT) .
    ")";
?>'

<强> example

请参阅 bobince ,发布有关JSON编码选项的信息。

答案 4 :(得分:1)

这是马虎编码,IMO。保持模板格式与处理分开。

    <?php
    // do processing of information

    $var = (((PSEUDOCODED DATA OUTPUT)));
    processtemplate($var);




    -------------
    //new file that is included by processtemplate()
?>
    ... blah ... blah ... blah ... blah 
    onclick="[[_KEYNAME_]]"
    ... blah ... blah ... blah ... blah ... blah