带有从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']}';

我已经从PHP打印了以下脚本。如果有人在描述中有一个单引号,则表示缺少javascript错误;因为它认为字符串终止了

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>