带有从PHP代码打印的单引号的Javascript字符串
我已经从PHP打印了以下脚本。如果有人在描述中有一个单引号,则表示缺少javascript错误;因为它认为字符串终止了带有从PHP代码打印的单引号的Javascript字符串,php,javascript,escaping,Php,Javascript,Escaping,我已经从PHP打印了以下脚本。如果有人在描述中有一个单引号,则表示缺少javascript错误;因为它认为字符串终止了 print "<script type=\"text/javascript\">\n var Obj = new Array();\n Obj.title = '{$_REQUEST['title']}'; Obj.description = '{$_REQUEST['description']}';
print "<script type=\"text/javascript\">\n
var Obj = new Array();\n
Obj.title = '{$_REQUEST['title']}';
Obj.description = '{$_REQUEST['description']}';
</script>";
print”\n
var Obj=新数组();\n
Obj.title='{$_请求['title']}';
Obj.description='{$_请求['description']}';
";
表单向该页面发送帖子,标题和描述来自文本框。此外,我无法在{$\u REQUEST['title']}周围加双引号,因为它显示了语法错误。如何处理此问题?使用字符串连接运算符:
print”\n
var Obj=新数组();\n
Obj.title='“$”请求['title']。”;
Obj.description='”$_请求['description']。”;
";
一种更干净(安全)的方法(imo):
var Obj=新数组();
Obj.title='';
对象描述=“”;
您还需要小心断线之类的事情。JavaScript字符串不能跨越多行。这是一条路要走。(由于代码示例,将此添加为新答案。)
不会解决OP的问题我的印象是,问题的第二部分是由键入以下内容引起的php语法错误:Obj.title=“{$\u REQUEST['title']”;是的。我认为strip_tags()
不会在这里增加安全性。它所能做的只是增加另一种破坏用户输入的可能性(因为它可能会吃到像<200
)我认为一个纯的addslashes()
应该足够安全。我想不出一个方法来打破这一点(尽管@Mike在上面展示了一个潜在的方法)事实上,我认为你是对的:它确实值得添加strip\u标签()
以防止@Mike在我的答案下面显示的脚本中断。+1
print "<script type=\"text/javascript\">\n
var Obj = new Array();\n
Obj.title = '".$_REQUEST['title']."';
Obj.description = '".$_REQUEST['description']."';
</script>";
<?php
//code here
$title = addslashes(strip_tags($_REQUEST['title']));
$description = addslashes(strip_tags($_REQUEST['description']));
?>
<script type="text/javascript">
var Obj = new Array();
Obj.title = '<?php echo $title?>';
Obj.description = '<?php echo $description?>';
</script>
<?php
$_REQUEST = array(
'title' => 'That\'s cool',
'description' => 'That\'s "hot"
& not cool</script>'
);
?>
<script type="text/javascript">
var Obj = new Array();
Obj.title = <?php echo json_encode($_REQUEST['title'], JSON_HEX_TAG); ?>;
Obj.description = <?php echo json_encode($_REQUEST['description'], JSON_HEX_TAG); ?>;
alert(Obj.title + "\n" + Obj.description);
</script>