[英]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
。
但是这种事情不是好形式。 使用所有嵌套的引用几乎是不可读的,并且因为您没有date
或PHP_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.