繁体   English   中英

找不到语法错误

[英]can't find what is wrong in the syntax

我有以下代码:

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

而postwith是一个函数。

在即我有一个错误: Expected identifier, string or number

在Firefox中可以,链接是:

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

那我的错误在哪里?

谢谢!

export是一个关键字,因此看来IE Javascript引擎与您在​​该上下文中使用它感到困惑。 您可以将其括在引号中以明确表明它是关键。

+1 warrenm,需要引用export

但是这种事情不是好形式。 使用所有嵌套的引用几乎是不可读的,并且因为您没有datePHP_SELF转义JavaScript字符串,文字转义或HTML来转义,所以您有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>分配它,而不要使用嵌入式事件处理程序属性。 这往往更具可读性。

正如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=" <?php 

会变成:

onclick="<?php 

为了将来参考,如果对PHP字符串使用双引号,并对字符串内部的数组元素使用大括号表示法,则可能会更易于校对:

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

在双引号内使用大括号表示法的简化示例
(请注意,您无需转义按字面显示的大括号)

此外,您应该使用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) .
    ")";
?>'

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

这是草率的编码,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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM